为什么 UMDH 找不到我的符号?我可以在没有它们的情况下解释堆栈跟踪吗?



我正在尝试使用UMDH调试内存泄漏。但是,它从未成功加载符号。我很确定我的设置正确 -

C:Documents and SettingsAdministrator>set _
_NT_SYMBOL_PATH=SRV*C:Symbols*http://msdl.microsoft.com/download/symbols;E:mysymbols
C:Documents and SettingsAdministrator>dir e:mysymbols
 Volume in drive E is DataApps
 Volume Serial Number is F6F5-37AE
 Directory of e:mysymbols
11/08/2012  03:20 PM    <DIR>          .
11/08/2012  03:20 PM    <DIR>          ..
11/08/2012  10:02 AM         2,630,656 Gen2EAPI.pdb
11/08/2012  10:07 AM         4,555,776 ObjectCommunicator.pdb
11/08/2012  10:01 AM         2,475,008 ObjSrvCommAPI.pdb
11/08/2012  10:02 AM         3,761,152 ScpmAPI.pdb
               4 File(s)     13,422,592 bytes
               2 Dir(s)  803,125,231,616 bytes free

但是umdh拒绝加载objectCommunicator.exe的符号:

// Debug library initialized ...
DBGHELP: ObjectCommunicator - no symbols loaded
DBGHELP: ntdll - public symbols  
        C:Symbolsntdll.pdbF7024C7F15FE4BEA992FF38BE58AC11C2ntdll.pdb

ObjectCommunicator.exe是使用这些选项构建的(使用VC 6.0。是的 - 它是旧的,但升级不是选项):

/nologo /MD /W3 /GR /GX /Zi /Od /I "..Scpm Api" /I "..ScpmImpl" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /D MODULE_NAME="ObjectCommunicator" /Fp"Release/ObjectCommunicator.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 

并与这些选项链接(减去一些.libs):

/nologo /subsystem:windows /incremental:no /pdb:"..BinRelease/ObjectCommunicator.pdb" /debug /machine:I386 /out:"..BinRelease/ObjectCommunicator.exe" /IGNORE:4089 

为什么UMDH无法加载我的符号?有什么方法可以调试吗?如果没有,是否有任何方法可以解释这样的umdh堆栈跟踪:

+   42432 (  45424 -   2992)    167 allocs  BackTraceAEB
+     156 (    167 -     11)    BackTraceAEB    allocations
ntdll!RtlAllocateHeapSlowly+41
ntdll!RtlAllocateHeap+E9F
msvcrt!malloc+6C
MFC42!operator new+15
ObjectCommunicator!???+0 : 402F71
ObjectCommunicator!???+0 : 43D6AC
ObjectCommunicator!???+0 : 43C523
ObjectCommunicator!???+0 : 43C3E4
MFC42!_AfxThreadEntry+FB
msvcrt!_endthreadex+A3
kernel32!BaseThreadStart+34

特别是" objectCommunicator!??? 0:43C3E4"是什么意思?例如,我可以使用CDB做点事,以将其转变为有意义的参考?

事实证明,我只需要实际安装调试工具即可。"高级Windows调试"声称可以通过副本安装这些工具,但这似乎与UMDH不起作用。使用官方安装程序安装后,我能够让UMDH查看符号。

相关内容

最新更新