SysProfがコールスタックを正しく生成しない場合、GProfは正確ではありません。また、-fno-omit-frame-pointerなしで動作するプロファイラーは、それに依存するものほど正確ですか?x86_64に-fomit-frame-pointerで動作するプロファイラはありますか?
答えて
私が知っていることはありません。フレームポインタを使用すると、スタックを歩くことはかなり簡単です。古いフレームポインタ、スタックポインタ、および命令ポインタを見つけるためにフレームポインタを参照解除し、完了するまで繰り返すだけです。フレームポインタがなければ、ELFプラットフォームでは一般的にDWARF CFIを意味する追加情報なしで確実にスタックを歩くことはできません。 DWARFは解析するのがかなり複雑で、プロファイラーが作業する必要がある時間的制約の中で行うのは、かなりの量の追加情報を読み込む必要があります。
これを実装するには1つのもっともらしい方法がありますすべてのサンプルでスタックメモリを使用し、CFIを使用してオフラインで歩き、適切に巻き戻します。スタックの深さによっては、かなりの記憶容量が必要になる可能性があり、コピーが禁止される可能性があります。私はこの手法を使ったプロファイラについて聞いたことがありませんが、Julian Seward floated it as a potential implementation strategyはFirefoxの組み込みプロファイラです。 Linuxのperf
の
私はdwarf(スタックアンワインド)メソッドでperfを使用しています。 -fno-omit-frame-pointerでコンパイルせずに動作します。 – Nasir
-fomit-frame-pointerがアサートされていると、ほとんどのプロファイラが動作しなくなります。合理的なプロファイリングをしたい場合は、おそらくそれを使用したり、ライブラリのデバッグバージョン(ほとんどの場合、-fomit-frame-pointerなしでコンパイルされています)にリンクする必要があります。
ライブラリが '-fomit-frame-pointer'なしでコンパイルされたとしても、 '-O'オプションが使用されている限り有効になります。これはx86_64のデフォルトオプションです。 libunwindでは、フレームポインタなしでデバッグを行うことができます。 – hirschhornsalz
最近のバージョンは、(--call-graph dwarf
と共に)使用することができる。
perf record -F99 --call-graph dwarf myapp
これはスタックをアンワインドするlibunwindのと.eh_frames
(又は.debug_frames
)を使用します。
私の経験では、時々迷子になります。
Haswellのperf +カーネルの最新バージョンでは、use the Last Branch Recordに--call-graph lbr
を設定できます。
これを実行すると、 'perf script'出力にスタックトレースがありません。何か案は? –
@TavianBarnes、私は現在、perf_4.0とperf_4.1と同じ[Debianの問題](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=793409)を持っています。 perf_3.16( 'perf script' =>' perf_3.16 script'の場合)に切り替えると、期待通りに動いています。私はこれがアップストリームの問題であるかどうかを(まだ)確認していませんでした。 – ysdx
参照のため、AFAIKは各サンプルのディスク上のスタックの一部をコピーし、後でCFIを使用して巻き戻します。 – ysdx
- 1. バックトレースはLinux x86_64でどのように動作しますか?
- 2. MySqlに対応するプロファイラはありますか?
- 3. .NET Micro Frameworkで実行されるプロファイラはありますか?
- 4. 長期的なJavaプロファイラまたはパフォーマンスロガーはありますか?
- 5. x86_64用の別のバージョンのbinutilsはありますか?
- 6. Xdebugプロファイラはlocalhost上でのみ動作します
- 7. Qt固有のプロファイラはありますか?
- 8. SQL Server ExpressのSQL Serverプロファイラはありますか?
- 9. Pythonソースコードにプロファイラの結果を注釈する方法はありますか?
- 10. Androidで動作する偽のデータジェネレータはありますか?
- 11. このシナリオで動作するデザインパターンはありますか?
- 12. TLSで動作するHaskell IMAPライブラリはありますか?
- 13. Windows Mobile上で動作する.NET IDEはありますか?
- 14. IPhone上で動作するプログラミング環境はありますか?
- 15. マニュアルテストで動作するコードカバレッジツールはありますか?
- 16. Samsung Galaxyタブで動作するJavaScriptジェスチャーライブラリはありますか?
- 17. Flash Player 9.0.16.0で動作するas3ビデオプレーヤーはありますか?
- 18. iphone/ipadで動作するjavascriptリッチテキストエディタはありますか?
- 19. 3.5で動作する.NET用Facebook SDKはありますか?
- 20. 一緒に動作するphpFiddleとsqlFiddleはありますか?
- 21. Python 3用に動作するOAuthライブラリはありますか?
- 22. .NET 4.0プロファイラをカスタマイズする方法の例はありますか?
- 23. 包括的なx86_64組立説明書リストはどこにありますか?
- 24. JREで動作するようにコンパイルできるコードはありますか?
- 25. アリのプロファイラに似ていて無料のツールはありますか?
- 26. .netには異なる動作モードがありますか?
- 27. Node.jsには、Ajaxで動作するCSRFトークンモジュールはありますか?
- 28. プログラムでJava HPROFプロファイラを起動する
- 29. ""動作を模倣するPHP関数はありますか?
- 30. アロハエディタ(またはhallo-js)で動作するwikiはありますか?
マンページ自体が '-fomit-frame-pointer'について警告することを覚えておいてください:" [...]一部のマシンではデバッグが不可能になります。 " –
ディストリビューション(Fedora)はデフォルトでコンパイルします。 – lamefun
x86_64の場合 'fomit-frame-pointer'はコマンドラインで指定されていなくてもデフォルトです。これはlibunwindが存在するためです。これは '-fno-omit-frame-pointer'を時代遅れにします。 – hirschhornsalz