在调试会话中,可以在“调试”窗口(每次启动调试会话时自动打开)中查看当前线程的调用栈。如果展开当前线程的节点,则可以看到在执行线程期间执行的调用序列列表。
为每个调用(标有 图标)提供的信息包括调用名称,后跟文件名和调用当前执行语句的行号。如果源可用,您可以右键单击该调用,然后选择“转至源”以转至该调用的源代码。
或者,也可以通过选择“窗口”>“调试”>“调用栈”(Alt-Shift-3) 打开“调用栈”窗口。
当前调用(以粗体显示)是当前线程所进行的最近一次调用。当选择一个不同的当前线程时,将更新该窗口以显示该线程的调用。此外,还会更新“局部变量”窗口以显示当前调用的变量值。
要浏览调用栈,请执行以下任意操作:
您可以使用以下方法捕获文本表示的调用栈:右键单击某个调用,然后从弹出式菜单中选择“复制栈”。在复制调用栈时,会将调用栈文本复制到剪贴板中。然后将调用栈粘贴到文本文件中。
可以更改程序的执行,使得要执行的下一条语句成为栈中较早产生的调用之一。通常,从调用栈中弹出或删除一个调用时,不会撤消该调用造成的任何影响。例如,如果一个调用打开了一个数据库连接并随后删除了该调用,则数据库连接仍将保持打开状态。
从调用栈中弹出最近的调用:
此调用将从调用栈中删除。程序计数器移动到执行已删除调用的指令的前一行。如果源代码可用,则将源代码编辑器的焦点设置为该行。继续执行程序时,会重复该调用。
从调用栈中弹出多个调用:
将从调用栈中删除选定调用之上的所有调用。程序计数器移动到执行已删除调用的指令的前一行。如果源代码可用,程序计数器将移到该行。继续执行程序时,会重复该调用。