SymFromAddr与给定地址的调试器符号不匹配

时间:2016-05-12 02:59:14

标签: c windows visual-studio debug-symbols dbghelp

在我的Windows应用程序中,我使用MinHook(https://github.com/TsudaKageyu/minhook)挂接了malloc,我正在使用CaptureStackBacktrace和SymFromAddr来获取内存泄漏的符号。 SymFromAddr可靠地为我的可执行文件中的地址工作,但是当报告来自DLL的地址的符号信息时,结果经常是不正确的。 SymFromAddr不报告错误,它只返回错误信息。调试器能够获得正确的信息(我可以将鼠标悬停在我传递给SymFrommAddr的地址上,并且Visual Studio正确报告模块和函数名称)。我想也许我的问题是一个糟糕的符号搜索路径,所以我更新了我对SymInitialize的调用以包含MS符号服务器和我的可执行文件的路径,但这并没有解决问题。

Visual Studio调试器是否使用dbghelp系统?有没有人对调试器和SymFromAddr不同意的原因有任何想法?

1 个答案:

答案 0 :(得分:0)

调用SymInitialize()时,第二个参数必须和这个设置一样:

Visual Studio > 工具菜单 > 选项 > 调试 > 符号 > 在此目录中缓存符号

此外,您应该选中同一窗口中的“加载所有模块”框。