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