我在我的可执行文件的测试版本中调用 SymGetSymFromAddr32。直到最近这才正常工作,但是当使用 Windows SDK 8.1 中的 dbghelp.dll 和 symsrv.dll 时,我的应用程序在调用此函数时挂起。
这是我得到的调用堆栈:
ZwWaitForKeyedEvent()
RtlpRunOnceWaitForInit()
string "Enabling heap debug options\n"()
InitOnceExecuteOnce()
GlobalDataInitialize()
InternetSetStatusCallbackCore()
InternetSetStatusCallbackW()
000007fed1e57d52
[Frames below may be incorrect and/or missing, no symbols loaded for symsrv.dll]
000007fed1e5786e
000007fed1ef0149
000007fed1ef03ac
000007fed1edc68e
000007fed1edd563
000007fed1f00da8
000007fed1eff61f
000007fed1eff30f
000007fed1ef5679
000007fed1ef5705
MyClass::SymGetSymFromAddr64(void *, unsigned __int64, unsigned __int64 *, _IMAGEHLP_SYMBOL64 *) C++
这是在使用 Windows SDK 8.1 中的 DLL 时(试用版本 6.3.9600.17200 和 6.3.9600.17298)。
当我从 Windows SDK 8.0(版本 6.2.9200.20512)切换回 DLL 时,应用程序可以正常工作并且不再挂起。
注意:为了确保我使用的是正确的 dbghelp.dll(支持符号服务器的那个,而不是 Windows 中默认安装的那个),我使用 LoadLibrary 显式加载 dbghelp.dll,并且 symsrv.dll 存储在同一个文件夹中.
有什么建议么?