3

私の Windows アプリケーションでは、MinHook ( https://github.com/TsudaKageyu/minhook ) を使用して malloc をフックしました。) そして、CaptureStackBacktrace と SymFromAddr を使用して、メモリ リークのシンボルを取得しています。SymFromAddr は、実行可能ファイル内のアドレスに対して確実に機能しますが、DLL から取得したアドレスのシンボル情報を報告すると、結果が正しくないことがよくあります。SymFromAddr はエラーを報告せず、単に不適切な情報を返します。ただし、デバッガーは正しい情報を取得できます (SymFrommAddr に渡すアドレスにカーソルを合わせると、Visual Studio がモジュールと関数名を正しく報告します)。おそらく私の問題はシンボル検索パスが間違っているのではないかと考えたので、SymInitialize への呼び出しを更新して、MS シンボル サーバーと実行可能ファイルへのパスを含めましたが、問題は解決しませんでした。

Visual Studio デバッガーは dbghelp システムを使用しますか? デバッガーと SymFromAddr が一致しない理由について何か考えがある人はいますか?

4

1 に答える 1

0

SymInitialize() を呼び出す場合、2 番目のパラメーターは次の設定と同じである必要があります。

Visual Studio > [ツール] メニュー > [オプション] > [デバッグ] > [シンボル] > [このディレクトリにシンボルをキャッシュする]

また、この同じウィンドウで [すべてのモジュールを読み込む] ボックスをオンにする必要があります。

于 2021-07-07T22:56:51.213 に答える