【问题标题】:Understanding Windbg output from call stack了解调用堆栈中的 Windbg 输出
【发布时间】:2013-12-17 12:50:30
【问题描述】:

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

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

我想知道这个输出的不同部分究竟意味着什么(尤其是在 +0x23 上)。

【问题讨论】:

  • 你用什么 WinDbg 命令来得到这个输出?了解命令和使用的任何参数会有所帮助。
  • 我之前评论的意思是,您是否必须使用kkp 命令,或者是否使用!analyze -v
  • 关于调用堆栈的 WaitOne+0x23 部分,它(很可能)是距最近函数入口点的偏移量,如 Sysinternals 论坛帖子中所述:forum.sysinternals.com/…
  • 很烦人的是k, kb, kc, kd, kp, kP, kv (Display Stack Backtrace) 没有这个信息,或者如果有,它就隐藏在一大堆文本中。

标签: debugging windbg


【解决方案1】:

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

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

第二个是当前帧的指令指针,指向接下来要执行的汇编指令。 您可以使用这样的 !U 命令反汇编此地址处的代码来获取模式详细信息

!U /d 00000000ffffffff

最后,WaitOne+0x23 表示当前正在执行的汇编命令位于 System.Threading.WaitHandle.WaitOne 方法的开始地址(这意味着它可能正在执行此方法),之后偏移 0x23 -由于您没有 mscorlib 的符号,因此您无法获得此偏移量的行号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2015-03-15
    • 2018-03-18
    • 2018-08-05
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多