IDebugSymbols не находит символы на сервере символов

Я пишу небольшое приложение, которое выводит стек вызовов данного дампа сбоя. Код более или менее основан на этом учебнике: http://blogs.msdn.com/b/joshpoley/archive/2008/05/27/opening-a-crash-dump-file-automating-crash-dump-analysis -часть-1.aspx? Redirected = верно

Код отлично работает, когда символ отладки находится рядом с дампом сбоя. Однако мое приложение не может найти символ отладки, когда он живет на сервере символов. Мой сервер символов указан в _NT_SYMBOL_PATH. Я уверен, что нет ничего плохого в _NT_SYMBOL_PATH и сервере символов, потому что, когда я открываю дамп сбоя в Visual Studio и WinDbg, они могут найти символ на сервере символов.

Я добавил параметр SYMOPT_DEBUG в свой экземпляр IDebugSymbols и я получаю следующий вывод:

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 знает о сервере символов.

Кто-нибудь имеет представление о том, что я делаю неправильно?

Заранее спасибо.

1 ответ

Вы должны получить инструменты отладки Windows (теперь из комплектов Windows) и использовать из него компоненты dbgeng.dll, dbghelp.dll и symsrv.dll. ОС имеет стандартную версию этих dll в System32 и, к сожалению, у них есть ограниченные функции. Например, они не поддерживают серверы символов в окнах 7.

Возможно, вы найдете наши проекты полезными:

kdlibcpp pykd - оболочка python для kdlibcpp

Например, этот код распечатывает текущий стек:

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

licensed under cc by-sa 3.0 with attribution.