IDebugSymbols在符号服务器中找不到符号

时间:2014-04-12 15:57:58

标签: windows debug-symbols dbghelp

我正在编写一个小应用程序,它打印出给定崩溃转储的调用堆栈。代码或多或少基于本教程:http://blogs.msdn.com/b/joshpoley/archive/2008/05/27/opening-a-crash-dump-file-automating-crash-dump-analysis-part-1.aspx?Redirected=true

当调试符号位于崩溃转储旁边时,代码可以正常工作。但是,当我的应用程序位于符号服务器中时,它找不到调试符号。我的符号服务器在_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 个答案:

答案 0 :(得分:1)

您应该获得Windows调试工具(现在从Windows套件中获取)并使用组件 它的dbgeng.dll,dbghelp.dll和symsrv.dll。操作系统在System32中具有这些dll的标准版本,不幸的是它们具有受限制的功能。例如,他们不支持Windows 7上的符号服务器。

你可能觉得我们的项目很有用:

kdlibcpp
pykd - python wrapper for kdlibcpp

例如,此代码打印出当前堆栈:

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