我是WinDbg的新手,我正在努力寻找一个bug,它让我的应用程序毫无征兆地挂起了。我不确定我做的事情是否正确,但我知道我需要系统dlls和我正在调试的.exe的两个符号。因此,我将我的符号路径设置如下:
srv*c:\websymbols*http://msdl.microsoft.com/download/symbols;S:\MY\PATH第二个路径指向我放置VS生成的.pdb的文件夹。我确信这是正确的.pdb文件,但它是在不同的架构上构建的(不确定这是否有问题)。首先,我希望看到完整的堆栈跟踪,所以我运行了!analyze-v。输出看起来像this。正如您所看到的,它将APPLICATION_HANG_WRONG_SYMBOLS列为主要问题。所以我运行了.reload /f,给了我this output。我没有dnAnalytics或Vertec.Interop的符号,所以这些错误是有意义的,但是有一些校验和丢失,并且没有找到iphlpapi.pdb。
所以我的问题是:即使我确定我有正确的.pdb文件可用,为什么WinDBG会将错误的符号列为主要问题?(我在生成转储的同一台机器上运行WinDBG )。即使我的符号看起来是错误的,我能在多大程度上信任堆栈跟踪呢?有没有人已经从堆栈跟踪中发现了可能导致我的应用程序挂起的明显问题?感谢您的指点!
发布于 2011-04-30 01:56:27
这里的“错误符号”可能是因为您使用的是版本低于4.0的64位CLR,而!analyze扩展在解码混合的本机/托管堆栈时遇到了一些问题。
在这种情况下,为什么WinDBG要在微软服务器上查找BJM.exe符号?
这是因为在符号路径中,您将符号服务器放在本地路径之前。Windbg不知道哪个模块是你的,哪个模块是微软的,它只是按照符号路径指定的顺序查找模块的PDB文件。
我可以在多大程度上信任堆栈跟踪,即使我的符号是错误的?
x64上的堆栈非常可靠,因为堆栈遍历不需要符号。符号是可靠的(即您没有错误的符号),除非您使用.reload /f /i强制windbg忽略错误的时间戳/校验和
在某些情况下,地址->符号可能看起来是错误的。这通常是由于小函数具有相同的代码(如果函数是虚拟的或代码未优化,则在C++代码中非常常见)
发布于 2011-04-29 01:45:36
尝试使用!sym noisy获取有关它实际查看的内容的更多信息(docs)。在这里,!itoldyouso可能也很有用(link)
https://stackoverflow.com/questions/5818679
复制相似问题