在 WinDbg 中查看调用堆栈(经典)
调用堆栈是指向程序计数器当前位置的函数调用链。 调用堆栈上最上面的函数是当前函数,下一个函数是调用当前函数的函数,依此类推。 除非更改寄存器上下文,否则显示的调用堆栈基于当前程序计数器。 有关如何更改注册上下文的详细信息,请参阅更改上下文。
在 WinDbg 中,可以通过输入命令或使用“调用”窗口来查看调用堆栈。
调试器命令窗口
可以通过在调试器命令窗口中输入其中一个 k(显示堆栈回溯)命令来查看调用堆栈。
“调用”窗口
作为 k 命令的替代方法,可以在“调用”窗口中查看调用堆栈。 若要打开“调用”窗口,请从视图菜单中选择调用堆栈。
以下屏幕截图显示了“调用”窗口的示例。
“调用”窗口中的按钮可用于自定义调用堆栈的视图。 要在源窗口或反汇编窗口中移动到相应的调用位置,请双击调用堆栈的一行,或选择一行并按 ENTER 键。 此操作还会将本地上下文更改为所选堆栈帧。 有关运行到此点或从此点开始运行的详细信息,请参阅控制目标。
在用户模式下,堆栈跟踪基于当前线程的堆栈。 有关当前线程堆栈的详细信息,请参阅控制进程和线程。
在内核模式下,堆栈跟踪基于当前的寄存器上下文。 可以将寄存器上下文设置为与特定线程、上下文记录或陷阱帧匹配。 有关设置寄存器上下文的详细信息,请参阅寄存器上下文。
“调用”窗口具有一个工具栏,其中包含多个按钮,还有一个包含其他命令的快捷菜单。 若要访问此菜单,请选择并按住标题栏或选择窗口右上角附近的图标 (
原始参数显示传递给函数的前三个参数。 在基于 x86 的处理器上,此显示器包含传递给函数的前三个参数(“Args to Child”)。
函数信息显示帧指针省略 (FPO) 数据以及有关函数的其他内部信息。 此命令仅在基于 x86 的处理器上可用。
源在函数名称后显示源模块名称和行号(如果调试器具有此信息)。
Addrs 显示各种与帧相关的地址。 在基于 x86 的处理器上,此显示包括堆栈帧(“ChildEBP”)和返回地址(“RetAddr”)的基指针。
帧编号显示帧编号。 帧始终连续编号,从零开始。
参数类型显示有关堆栈中函数预期和接收的参数的详细信息。
始终浮动会使窗口保持未停靠状态,即使将其拖动到停靠位置也是如此。
随帧移动会导致在移动 WinDbg 帧时移动窗口,即使取消停靠该窗口也是如此。
其他信息
有关寄存器上下文和本地上下文的详细信息,请参阅更改上下文。