如何让 dbghelp 从自定义符号存储加载符号?

How to make dbghelp to load symbols from custom sym store?

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

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

SymFromAddr returns 错误 487 "Attempt to access invalid address." 因为它找不到符号,因为它甚至从未尝试下载它。

有什么办法可以强制下载吗?

如果你想使用 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://...。如果您 copy/paste 从您的代码到 WinDbg 的符号路径,它可能不会正常工作。

事实证明 dbghelp.dll 需要 symsrv.dll 才能加载符号。它很难找到它,所以需要一点帮助。 我使用 dbghelp 日志记录来帮助追踪问题 https://msdn.microsoft.com/en-us/library/ms680687.aspx