1

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

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

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

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

4

2 回答 2

5

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

于 2016-03-23T11:07:14.287 回答
-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,它可能无法正常工作。

于 2016-03-22T20:21:32.957 回答