2

我在我的可执行文件的测试版本中调用 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 存储在同一个文件夹中.

有什么建议么?

4

0 回答 0