1

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 

そして、これらのオプションとリンクされています(一部の.libを除く):

/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 で何かできることはありますか?

4

1 に答える 1

1

結局、デバッグ ツールを実際にインストールするだけで済みました。「高度な Windows デバッグ」では、これらのツールはコピーを介してインストールできると主張していましたが、UMDH では機能しないようです。公式インストーラーを使用してインストールした後、UMDH でシンボルを表示することができました。

于 2015-06-15T18:41:31.810 に答える