xperf トレースで完全なコール スタックを取得する際に問題が発生しています。これはWin7 64ビットPC上にあります。より高いレベルでは、複数の dll をロードする exe があり、これらも大部分の作業を行います。すべての pdb ファイルは 1 つのディレクトリにあり、実行可能コードで有効なシンボルとコール スタックを取得できるので、シンボル パスが正しく設定されていると確信できます。
私のexeがロードされたdllの1つを呼び出すとすぐに、コールスタック情報が失われ、スタック列が表示さ plugin_name.dll!?
れ、展開するとそれ自体が呼び出されます。重みタブには高いパーセンテージ (50 ~ 90%) と高いカウントが表示されますが、スタックの実際の関数呼び出しを取得できません。例えば:
Process, Stack, Module, Function, Weight, % Weight, Count, TimeStamp
, | kernel32.dll!BaseThreadInitThunk, , , 59067.075556, 73.29, 59075,
, | |- plugin_name.dll!?, , , 45036.186642, 55.88, 45042,
, | | plugin_name.dll!?, , , 45036.186642, 55.88, 45042,
これらを踏まえて、
http://blogs.msdn.com/b/pigscanfly/archive/2009/08/06/stack-walking-in-xperf.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop /ff191014(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ff191014.aspx
これは xperf を示しているようです
- 「...アドレスにある実行可能イメージがわかりません」
- "...最大スタック深度を超えています" .
私が見つけたこれの考えられる原因は、FPO (フレーム ポインターの最適化) がオンになっている (/Oy で明示的に無効にしましたが、オンにする必要はありません)、または最大スタック深度を超えていることです。これが私が当たっているかどうかを判断する方法がわかりません。
dll のどこで時間が費やされているかを確認できなければ、あまり有用な情報を得ることができないので、何が起こっているのかを突き止めたいと思います。
読んだり試したりすることについて、何か推奨事項はありますか? 私が見逃しているスタックウォークの制限はありますか? dll のコール スタックに固有の、シンボル用の特別な設定はありますか?