プロファイリングしているツールのシンボルを取得するために、xperf で歯と爪と戦ってきました。ツール内で実行される私のコードは、.exe と .dll に分かれています。プロファイリングする重要なものは .dll にあります。xperf を実行しました:
xperf -on PROC_THREAD+LOADER+INTERRUPT+DPC+PROFILE -stackwalk profile
そして、ツールを少し実行してから、
xperf -d profile.etl
次に、xperfview を試してみました。プロファイルをロードし、「シンボルのロード」をオンにして、サマリー テーブルを開きました。シンボルはまったくありません-文字通りモジュールは関数列で「不明」になりました。私はこれについて他のスレッドを精査しましたが、これが私が試したことです:
- 環境変数 _NT_SYMBOL_PATH および _NT_SYMCACHE を設定しました
- シンボル キャッシュをクリアし、xperf -symbols -i profile_results.etl を実行しました。
- 最近のバージョンの Windows Debugging Tools から dbghelp.dll をコピーし、上記を繰り返しました。
これをすべて実行した後、自分のコードではないほとんどのモジュールで関数名が正しく表示されるようになりましたが、dll を表示できません。dll はリリース モード (最適化あり) でコンパイルされていますが、特に pdb を作成するように Visual Studio プロジェクトを設定しました。pdb が存在し、_NT_SYMBOL_PATH のディレクトリ内にあることを確認しました。これを修正する方法、または少なくともさらにデバッグする方法を知っている人はいますか?