2012-11-12 42 views
1

我想使用UMDH調試內存泄漏。但它從未成功加載符號。我敢肯定,我已經設置了正確的事情 -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」是什麼意思?例如,我可以和國家開發銀行做些什麼來把它變成一個有意義的參考?

+0

從未使用umdh,但博士。記憶可能更好地爲你服務?這是我在Windows上使用的最接近valgrind的東西。 –

+0

很難猜到這一點。通過一切手段,*做*使用CDB解決這個問題。它使用與UMDH相同的符號引擎。國家開發銀行有-n選項打開「噪音符號加載」。 –

+0

CDB可以找到我的符號 - 特別是,看起來我可以使用'ln

'查找來自UMDH的堆棧跟蹤中的符號。我得到'***警告:無法驗證來自CDB的C:\ Program Files \ Datacard \ SCS \ bin \ ObjectCommunicator.exe'消息的校驗和,但它會從e:\ mysymbols中找到符號。我很困惑,因爲我知道UMDH和CDB使用相同的符號查找引擎。 –

回答

0

原來,我只需要做一個真正的調試工具安裝。 「高級Windows調試」聲稱這些工具可以通過副本進行安裝,但這似乎不適用於UMDH。使用官方安裝程序進行安裝後,我可以讓UMDH看到這些符號。

相關問題