繁体   English   中英

与崩溃转储相比,WinDbg在附加到进程时显示不同的调用堆栈

[英]WinDbg showing different call stacks when attached to process when compared to crash dump

我正在分析在使用本机库和托管代码时发生的死锁。 我正在使用WinDbg来调试问题,目的是保存转储,以便供应商可以在他们的场所观察问题。

当附加到有问题的进程时,我在任何调用堆栈之前看到以下消息:

警告:堆栈展开信息不可用。 以下框架可能是错误的。

直接连接到流程时,框架看起来确实正确。 但是,当我转储此文件,然后在另一台机器上打开WinDbg中的转储时,其中一个堆栈帧不同(上面的错误也显示出来。)这原本让供应商难倒,因为代码路径似乎不可能。

我使用以下转储:

.dump /ma filename.dmp

什么会导致这种差异,我有什么办法可以可靠地分析转储文件的调用堆栈? 可能还有其他任何我应该注意的误传数据吗?

这听起来像你可能有不匹配的pdbs。 你试过过!chksym!itoldyouso命令吗? 例如,请参阅Bugslayer文章

另一件要尝试的是!sym noisy ,它应该显示正在加载哪些pdb文件。

另请参阅MSDN博客

警告告诉您调试器无法将堆栈上的一个或多个地址与现有模块信息相关联。 由于托管代码是由CLR动态编译的,因此代码没有相应的模块,因此没有警告。

SOS命令!clrstack具有来自CLR的必要信息以显示有意义的堆栈(或至少没有警告)。 如果使用任何本机堆栈转储命令,您将看到托管代码的此警告。

即将出版的书籍Advanced .NET Debugging还有其他详细信息。 http://advanceddotnetdebugging.com/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM