我正在分析与托pipe代码一起使用本机库时发生的死锁。 我正在使用WinDbg来debugging问题,以便保存转储,以便供应商可以在其处所观察问题。
当附加到有问题的过程时,我会在任何调用堆栈之前看到以下消息:
警告:堆栈展开信息不可用。 以下框架可能是错误的。
直接连接到stream程时,框架实际上看起来是正确的。 但是,当我转储此文件,然后在另一台机器上的WinDbg中打开转储时,其中一个堆栈帧是不同的(上面的错误也会显示出来)。原本这个供应商难倒了,因为代码path似乎不可行。
检测附加的分析器
防止事件C#冒泡
ShowDialog返回types:窗体与窗口
如何获得图像中的多数颜色?
我拿着转储使用:
.dump /ma filename.dmp
什么会导致这种差异,有什么我可以做的,可靠地分析转储文件的调用堆栈? 可能还有我应该注意的任何其他歪曲的数据?
“永远在上面”的对面
如何将HTML和文本都复制到剪贴板?
DirectXinput是游戏中键盘处理的正确select吗?
Windows应用程序图标文件
这听起来像你可能有不匹配的pdbs。 你尝试过!chksym和!itoldyouso命令吗? 例如见Bugslayer文章
另一个要尝试的是!sym noisy ,应该告诉你哪些pdb文件正在被加载。
另请参阅MSDN博客
该警告告诉您,调试器无法将堆栈中的一个或多个地址与现有的模块信息相关联。 由于托管代码是由CLR实时编译的,因此没有相应的代码模块,因此也没有警告。
SOS命令!clrstack从CLR中获得必要的信息来显示一个有意义的堆栈(或者至少没有警告)。 如果您使用任何本机堆栈转储命令,您将看到托管代码的此警告。
即将出版的“高级.NET调试”一书还有其他细节。 请参阅http://advanceddotnetdebugging.com/