一般情况下,我找不到WinDbg输出{{1}}命令中的不同字段可以包含的值的含义列表。
搜索很困难,因为命令的输出通常是在没有明确地解决字段值(如DEFAULT_BUCKET_ID和PRIMARY_PROBLEM_CLASS的字段值)的情况下发布的。有参考清单吗?
更具体一点:在分析内存转储期间,!analyze -v
命令的输出表明DEFAULT_BUCKET_ID和PRIMARY_PROBLEM_CLASS都是“STACKIMMUNE”。这是什么意思?
答案 0 :(得分:7)
首先简要介绍!analyze
的工作原理。
当!analyze
尝试确定access violation的原因(以及一些其他类型的异常,例如SEH exceptions,C ++异常,整数溢出,除零等等。 ),它查看抛出异常的线程的调用堆栈,并找出线程顶部的内容。但是,并非所有堆栈帧都有用。
例如,对于C ++异常,您将在堆栈顶部看到kernel32!RaiseException
和your_module!__except_handler3
。必须跳过这些框架,因为它们不太可能是问题的原因。有时!analyze
必须跳过很多帧才能进入有趣的帧。只需看一下example on other Stack Overflow question,其中有问题的代码在下面约40帧。
要回答您的问题:STACKIMMUNE
表示会跳过调用堆栈中的所有帧。当堆栈损坏或符号错误并使用!reload /i
忽略任何不匹配错误时,可能会发生这种情况,并且可能在许多其他情况下。