【问题标题】:What does WinDbg's PRIMARY_PROBLEM_CLASS STACKIMMUNE mean?WinDbg 的 PRIMARY_PROBLEM_CLASS STACKIMMUNE 是什么意思?
【发布时间】:2012-01-30 15:06:00
【问题描述】:

一般来说,我找不到 WinDbg 的 !analyze -v 命令输出中不同字段可以包含的值的含义列表。

搜索很困难,因为命令的输出通常在没有明确处理字段值(如 DEFAULT_BUCKET_ID 和 PRIMARY_PROBLEM_CLASS)的情况下发布。有参考清单吗?

更具体地说:在分析内存转储期间,!analyze -v 命令的输出表明 DEFAULT_BUCKET_ID 和 PRIMARY_PROBLEM_CLASS 都是“STACKIMMUNE”。这是什么意思?

【问题讨论】:

    标签: windbg


    【解决方案1】:

    首先简单介绍一下!analyze 的工作原理。

    !analyze 尝试确定access violation 的原因(以及一些其他类型的异常,例如SEH exceptions、C++ 异常、整数溢出、被零除等)时,它会查看抛出异常的线程的调用堆栈并找出线程顶部的内容。然而,并不是所有的堆栈帧都是有用的。

    例如,对于 C++ 异常,您将在堆栈顶部看到 kernel32!RaiseExceptionyour_module!__except_handler3。必须跳过这些帧,因为它们不太可能是问题的原因。有时!analyze 必须跳过很多帧才能到达有趣的帧。看看example on other Stack Overflow question,有问题的代码在下面约 40 帧。

    回答您的问题:STACKIMMUNE 表示调用堆栈中的所有 帧都被跳过。当堆栈损坏或您有错误的符号并使用!reload /i 忽略任何不匹配错误时,可能会发生这种情况,并且可能在许多其他情况下。

    【讨论】:

    • 谢谢。这很清楚,但是是否列出了所有可能的 PRIMARY_PROBLEM_CLASS 值及其含义?
    • 抱歉,我不知道 !analyze 将输出什么的任何全面描述,只是一些无关的信息。
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多