Я пытаюсь отладить утечку памяти с помощью UMDH. Тем не менее, он никогда успешно не загружает символы. Я почти уверен, что все настроено правильно —
C:\Documents and Settings\Administrator>set _
_NT_SYMBOL_PATH=SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;E:\mysymbols
C:\Documents and Settings\Administrator>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:\Symbols\ntdll.pdb\F7024C7F15FE4BEA992FF38BE58AC11C2\ntdll.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:"..\Bin\Release/ObjectCommunicator.pdb" /debug /machine:I386 /out:"..\Bin\Release/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 увидеть символы.
Других решений пока нет …