2014-04-12 8 views
0

주어진 크래시 덤프의 호출 스택을 인쇄하는 작은 응용 프로그램을 작성하고 있습니다. 코드는이 자습서의 기본 코드입니다. http://blogs.msdn.com/b/joshpoley/archive/2008/05/27/opening-a-crash-dump-file-automating-crash-dump-analysis-part-1.aspx?Redirected=trueIDebugSymbols가 기호 서버에서 기호를 찾지 못합니다.

디버그 기호가 크래시 덤프와 나란히 있으면 코드가 제대로 작동합니다. 그러나 내 응용 프로그램은 심볼 서버에있을 때 디버그 심볼을 찾을 수 없습니다. 내 기호 서버는 _NT_SYMBOL_PATH으로 지정됩니다. Visual Studio와 WinDbg에서 크래시 덤프를 열면 심볼 서버에서 심볼을 찾을 수 있기 때문에 _NT_SYMBOL_PATH과 심볼 서버에는 아무런 문제가 없습니다.

나는 IDebugSymbols의 내 인스턴스에 SYMOPT_DEBUG 옵션을 추가하고 나는 다음과 같은 출력을 얻을 :

DBGHELP: _NT_SYMBOL_PATH :

srv*c:\localsymbols*my_symbol_server*http://msdl.microsoft.com/download/symbols 

DBGHELP: Symbol Search Path :

.;srv*c:\localsymbols*my_symbol_server*http://msdl.microsoft.com/download/symbols 

나는 그게 내 예를 의미합니다 생각을 IDebugSymbols는 심볼 서버에 대해 알고 있습니다.

내가 뭘 잘못하고 있는지 알 수있는 사람이 있습니까?

미리 감사드립니다.

답변

2

Windows 디버깅 도구 (Windows 키트에서)를 가져와 dbgeng.dll, dbghelp.dll 및 symsrv.dll 구성 요소를 사용해야합니다. OS는 System32에서 이러한 dll의 표준 버전을 가지고 있으며 불행히도 제한된 기능을 가지고 있습니다.

kdlibcpp 예를 들어
pykd - python wrapper for kdlibcpp

이 코드 밖으로 인쇄 현재 스택 :

StackPtr stk = getStack(); 
for (int i = 0; i < stk->getFrameCount(); ++i) 
    dprintln(findSymbol(stk->getFrame(i)->getIP())) 
+0

예를 들어 그들은 창에 기호 서버를 지원 해달라고 7.

는 당신이 우리의 프로젝트가 유용 찾을 수 있습니다 그건 당신의 도움 덕분입니다. 나는 pykd를 조사 할 것이다. 매우 유용 할 것 같습니다. – Clem