2012-11-12 5 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에 대한 기호를로드 거부 : ObjectCommunicator.exe이 옵션으로 지어진

// Debug library initialized ... 
DBGHELP: ObjectCommunicator - no symbols loaded 
DBGHELP: ntdll - public symbols 
     C:\Symbols\ntdll.pdb\F7024C7F15FE4BEA992FF38BE58AC11C2\ntdll.pdb 

(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에서 내 기호를로드 할 수 없습니까? 그걸 디버깅 할 방법이 있습니까? 특히

+ 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"무엇을 않습니다 의미하지는 경우에,이 같은 UMDH 스택 추적을 해석 할 수있는 방법은 무엇입니까? 예를 들어 CDB를 사용하여 의미있는 참조로 전환 할 수 있습니까?

+0

umdh는 사용하지 않았지만 dr. 기억이 더 잘할 수 있을까요? 그것은 내가 창문에서 사용한 valgrind에 가장 가까운 것입니다. –

+0

이것을 추측하기는 어렵습니다. 꼭이 문제를 해결하기 위해 CDB를 사용하십시오. UMDH와 동일한 기호 엔진을 사용합니다. CDB에는 "noyy symbol load"를 켜는 -n 옵션이 있습니다. –

+0

CDB가 내 심볼을 찾을 수 있습니다. 특히,'ln

'을 사용하여 UMDH에서 스택 추적의 심볼을 찾을 수 있습니다. CDB에서 '*** 경고 : C : \ Program Files \ Datacard \ SCS \ bin \ ObjectCommunicator.exe' 메시지의 체크섬을 확인할 수 없지만 e : \ mysymbols의 기호를 찾습니다. 나는 UMDH와 CDB가 동일한 기호 찾기 엔진을 사용한다는 것을 알고 있기 때문에 매우 혼란 스럽다. –

답변

0

밝혀졌습니다. 디버깅 도구를 실제로 설치해야했습니다. "고급 Windows 디버깅"은 해당 도구를 복사본을 통해 설치할 수 있다고 주장했지만 UMDH에서는 작동하지 않는 것으로 보입니다. 공식 설치 프로그램을 사용하여 설치 한 후 UMDH에서 심볼을 볼 수있었습니다.