xperfトレースでフルコールスタックを取得する際に問題が発生しています。これはWin7 64bit PC上にあります。より高いレベルでは、いくつかのDLLをロードするexeを持っています。すべてのpdbファイルは1つのディレクトリにあり、実行可能なコードで有効なシンボルと呼び出しスタックを取得するので、シンボルパスが正しく設定されていることを確認できます。xperfコールスタックトレース(DLL固有)
私の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
これは何のexecを知らない...そのXperfは
- 」を示しているようです"
- " ...最大スタック深度を超えました "。
FPO(フレームポインタの最適化)がオンになっている(私は明示的に/ Oyを使用していないにもかかわらず無効にしています)、またはスタックの最大深度を超えているため、これが私の打撃であるかどうかを判断する方法がわかりません。
dllでどこの時間が費やされているか分かりませんが、私は非常に有用な情報を得ることができないので、何が起こっているのか把握したいと思います。
誰かが読んだり、試してみることをおすすめしますか? stackwalkには何か制限がありますか?シンボルの特別な設定はありますか?dllの呼び出しスタックに特有ですか?
、これは古い質問です確かに - 私はまだこれが私のDLLのシンボルが時々ロードに失敗WPAに問題があることがわかり、私は望んでいましたすべてのシンボルパスがc:\(ローカルとキャッシュの場所)を指していることを確認するために、私はc:から(mklink経由で)プロファイルしたいものを実行し、DLLをアンロードしません。それが更新されると更新されます – g3cko