実行可能ファイルのテスト バージョンで 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 を同じフォルダーに保存します。 .
助言がありますか?