在 WinDbg 中查看调用堆栈(经典)

调用堆栈是指向程序计数器当前位置的函数调用链。 调用堆栈上最上面的函数是当前函数,下一个函数是调用当前函数的函数,依此类推。 除非更改寄存器上下文,否则显示的调用堆栈基于当前程序计数器。 有关如何更改注册上下文的详细信息,请参阅更改上下文

在 WinDbg 中,可以通过输入命令或使用“调用”窗口来查看调用堆栈。

调试器命令窗口

可以通过在调试器命令窗口中输入其中一个 k(显示堆栈回溯)命令来查看调用堆栈。

“调用”窗口

作为 k 命令的替代方法,可以在“调用”窗口中查看调用堆栈。 若要打开“调用”窗口,请从视图菜单中选择调用堆栈

以下屏幕截图显示了“调用”窗口的示例。

Screenshot of the Calls window in WinDbg.

“调用”窗口中的按钮可用于自定义调用堆栈的视图。 要在源窗口反汇编窗口中移动到相应的调用位置,请双击调用堆栈的一行,或选择一行并按 ENTER 键。 此操作还会将本地上下文更改为所选堆栈帧。 有关运行到此点或从此点开始运行的详细信息,请参阅控制目标

在用户模式下,堆栈跟踪基于当前线程的堆栈。 有关当前线程堆栈的详细信息,请参阅控制进程和线程

在内核模式下,堆栈跟踪基于当前的寄存器上下文。 可以将寄存器上下文设置为与特定线程、上下文记录或陷阱帧匹配。 有关设置寄存器上下文的详细信息,请参阅寄存器上下文

“调用”窗口具有一个工具栏,其中包含多个按钮,还有一个包含其他命令的快捷菜单。 若要访问此菜单,请选择并按住标题栏或选择窗口右上角附近的图标 (Screenshot of the button displaying the Calls window toolbar shortcut menu in WinDbg.

  • 原始参数显示传递给函数的前三个参数。 在基于 x86 的处理器上,此显示器包含传递给函数的前三个参数(“Args to Child”)。

  • 函数信息显示帧指针省略 (FPO) 数据以及有关函数的其他内部信息。 此命令仅在基于 x86 的处理器上可用。

  • 在函数名称后显示源模块名称和行号(如果调试器具有此信息)。

  • Addrs 显示各种与帧相关的地址。 在基于 x86 的处理器上,此显示包括堆栈帧(“ChildEBP”)和返回地址(“RetAddr”)的基指针。

  • 帧编号显示帧编号。 帧始终连续编号,从零开始。

  • 参数类型显示有关堆栈中函数预期和接收的参数的详细信息。

  • 始终浮动会使窗口保持未停靠状态,即使将其拖动到停靠位置也是如此。

  • 随帧移动会导致在移动 WinDbg 帧时移动窗口,即使取消停靠该窗口也是如此。

其他信息

有关寄存器上下文和本地上下文的详细信息,请参阅更改上下文