我在可执行文件的测试版本中调用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同一个文件夹。
有什么建议吗?