【问题标题】:IDebugSymbols doesn't find symbols in symbol serverIDebugSymbols 在符号服务器中找不到符号
【发布时间】:2014-04-12 15:57:57
【问题描述】:

我正在编写一个小应用程序,它打印出给定故障转储的调用堆栈。代码或多或少基于本教程: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 实例知道符号服务器。

有人知道我做错了什么吗?

提前致谢。

【问题讨论】:

    标签: windows debug-symbols dbghelp


    【解决方案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() ) )
    

    【讨论】:

    • 成功了,感谢您的帮助。我会检查 pykd。看起来它可能非常有用。
    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多