了解调用堆栈的Windbg输出

时间:2013-12-17 12:50:31

标签: debugging windbg

通过分析Windbg中的崩溃转储,以下是堆栈上的最后一次调用(使用clrstack获取):

  

00000000`1eeee410 00000000`ffffffff mscorlib_ni!System.Threading.WaitHandle.WaitOne + 0x23

我想知道这个输出的不同部分究竟是什么意思(更特别是+ 0x23)。

1 个答案:

答案 0 :(得分:5)

您正在调试64位进程,因此每个帧都打印出两个指针

第一个是000000001eeee410 - 是一个子堆栈指针,你可以在这里阅读更多关于如何手动使用它来手动恢复以前的framew http://www.codeproject.com/Articles/331050/Assembly-Helps-Debug-NET-Applications 但除非你正在处理奇怪的损坏的状态内存转储,否则它并不重要:)

第二个是帧的当前指令指针,指向下一个将要执行的汇编指令。 您可以通过使用!U命令(例如此

)取消此地址的代码来获取模式详细信息

!U / d 00000000ffffffff

最后,WaitOne + 0x23表示正在执行的当前asembly命令位于System.Threading.WaitHandle.WaitOne方法的启动地址(这意味着它可能正在执行此方法)和偏移量之后的0x23 - 因为你没有mscorlib的符号,你不能得到这个偏移的行号