Debugging WinDbg:应用程序\u挂起\u错误\u符号

Debugging WinDbg:应用程序\u挂起\u错误\u符号,debugging,windbg,symbols,debug-symbols,freeze,Debugging,Windbg,Symbols,Debug Symbols,Freeze,我是WinDbg的新手,我正试图找到一个让我的应用程序无缘无故挂起的bug。我不确定我是否做得对,但我知道我需要系统DLL的两个符号以及我正在调试的.exe。因此,我将我的符号路径设置为: srv*c:\websymbols*http://msdl.microsoft.com/download/symbols;S:\MY\PATH 第二个路径指向一个文件夹,我将VS.I生成的.pdb放在该文件夹中,这是正确的.pdb文件,但它构建在不同的体系结构上(不确定这是否是问题)。我想先看看完整的堆栈跟

我是WinDbg的新手,我正试图找到一个让我的应用程序无缘无故挂起的bug。我不确定我是否做得对,但我知道我需要系统DLL的两个符号以及我正在调试的.exe。因此,我将我的符号路径设置为:

srv*c:\websymbols*http://msdl.microsoft.com/download/symbols;S:\MY\PATH
第二个路径指向一个文件夹,我将VS.I生成的.pdb放在该文件夹中,这是正确的.pdb文件,但它构建在不同的体系结构上(不确定这是否是问题)。我想先看看完整的堆栈跟踪,所以我跑了!分析-v。输出看起来像。正如您所见,它将应用程序挂起错误的符号列为主要问题。所以我跑了。重新加载/f,给我。我没有dnAnalytics或Vertec.Interop的符号,因此这些错误是有意义的,但缺少一些校验和,并且找不到iphlpapi.pdb


所以我的问题是:为什么WinDBG将错误的符号列为主要问题,即使我肯定我有正确的.pdb文件可用?(我在生成转储的同一台机器上运行WinDBG)。即使我的符号看起来是错误的,我在多大程度上可以信任堆栈跟踪?有没有人看到一个明显的问题,可能导致我的应用程序从堆栈跟踪中挂起?感谢任何指点

尝试使用
!sym noise
以获取有关其实际查看内容的更多信息()<代码>!itoldyouso在这里可能也很有用()

这里的“错误符号”可能是因为您使用的是版本低于4.0的64位CLR和!analyze extension在解码混合本机/托管堆栈时遇到一些问题

WinDBG为什么要查找BJM.exe 中的microsoft服务器上的符号 这个案子

这是因为在符号路径中将符号服务器放在本地路径之前。Windbg不知道哪个模块是您的,哪个是Microsoft的。它只是按照符号路径指定的顺序查找模块的PDB文件

即使我的符号看起来是错误的,我在多大程度上可以信任堆栈跟踪

x64上的堆栈非常可靠,因为堆栈漫游不需要符号。符号是可靠的(即您没有错误的符号),除非您使用
强制windbg忽略错误的时间戳/校验和。重新加载/f/i


在某些情况下,地址->符号可能看起来是错误的。这通常是由于具有相同代码的小函数(在C++代码中非常常见,如果函数是虚拟的或代码未优化)

,我尝试如下:在同一台机器上重新编译应用程序,引发挂起,将内存丢弃,加载到Wirbg中。当然,我有正确的pdb可用,因为我刚刚重新编译(排除了问题是由错误的pdb引起的任何可能性),并如上所述将WinDBG指向它。又是错误的符号!(c.f.)。在这种情况下,WinDBG为什么要在microsoft服务器上查找BJM.exe符号?上面显示的.reload/f之后的输出实际上是!太吵了。但我要看看!明天上班的时候我会告诉你的,谢谢你的意见。我刚跑了!我在建议的可执行文件上告诉你它匹配正确。我可以从
FAILURE\u BUCKET\u ID:APPLICATION\u HANG\u error\u SYMBOLS\u 8000007\u user32.dll一行中退出吗!NtUserWaitMessage
user32.dll导致错误的符号消息!我告诉你,这也没问题……我不确定——我经常收到错误的符号警告,但我仍然得到有用的输出。如果您正在查看挂起,请尝试使用
!分析-v-hang
并尝试
!locks
命令,该命令将告诉您是否有其他线程持有任何锁/互斥锁。