【问题标题】:How to make dbghelp to load symbols from custom sym store?如何使 dbghelp 从自定义符号存储中加载符号?
【发布时间】:2016-03-22 18:23:02
【问题描述】:

SymInitialize 和 SymFromAddr 方法有什么方法可以自动从自定义符号存储中加载符号。我正在尝试使用 SymFromAddr() 将地址解析为可读的函数名。如果我在本地存储了给定模块的符号,它似乎工作正常,但是我希望它自动从提供给 SymInitialize 的路径下载它们,就像 WinDbg 那样。 我这样称呼 SymInitialize:

SymInitialize(procHandle, "SRV*c:\\symbols*http://msdl.microsoft.com/download/symbols;http://mycustomstore.com/symbols", TRUE);

SymFromAddr 返回错误 487“尝试访问无效地址”。因为它甚至从未尝试下载它,所以找不到该符号。

有没有办法强制下载?

【问题讨论】:

  • 尝试删除分号并将其替换为星号或提供 null 并将 _NT_SYMBOL_PATH 设置为带星号的字符串 set _NT_SYMBOL_PATH=srv*\\localserver\myshare\mycache*company.com/manysymbols 参考 windbg 中的高级 symsrv 使用帮助文件

标签: winapi windbg dbghelp


【解决方案1】:

事实证明 dbghelp.dll 需要 symsrv.dll 才能加载符号。它正在努力寻找它,因此需要一些帮助。 我使用 dbghelp 日志记录来帮助追踪问题https://msdn.microsoft.com/en-us/library/ms680687.aspx

【讨论】:

  • 如果你这样做,符号路径会按照输入的方式工作还是你仍然需要修改它,无论是@blabb 还是我的回答中提到的?
  • 是的,我必须修改它,并且在每个远程符号服务器之前都有 srv*
【解决方案2】:

如果你想使用 HTTP 符号存储,你定义它

.sympath SRV*c:\mysymbols*http://example.com/symbols

要添加 Microsoft 符号路径,请使用

.symfix+ c:\microsoftsymbols

现在查看 WinDbg 符号路径可以得到:

0:000> .sympath
srv*c:\mysymbols*http://example.com/symbols;SRV*c:\microsoftsymbols*http://msdl.microsoft.com/download/symbols

这告诉我们您的符号路径不正确,因为它没有第二个SRV*...* 部分,而只有http://...。如果您将代码中的符号路径复制/粘贴到 WinDbg,它可能无法正常工作。

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2013-12-29
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多