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

时间:2016-03-22 18:23:03

标签: winapi windbg dbghelp

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

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

SymFromAddr返回错误487"尝试访问无效地址。"因为它从未尝试过下载,因此无法找到符号。

有没有办法强制下载它们?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:-1)

如果要使用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,它可能也无法正常工作。