如何让 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
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