問題タブ [flamegraph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 特定のバイナリ実行可能ファイルに対するフレームグラフの作成
flamegraph
Rust 実行可能ファイル ( にあります)を作成したいと考えていますtarget/release/name-of-binary
。ここperf
までのコマンドを見つけました
ただし、私は mac os を訴えているのでperf
、持っておらず、使用する必要がありますdtrace
。特定の PID での使用dtrace
方法はわかりましたが、特定の Rust バイナリでの使用方法がわかりません。どんな助けでも大歓迎です!
c++ - C++ 標準ライブラリを含むフレーム ポインタ パフォーマンス コール スタック/フレームグラフを取得するにはどうすればよいですか?
fp
でコール スタックを収集する方法が気に入っています。perf record
軽量で より複雑ではないからdwarf
です。しかし、プログラムが C++ 標準ライブラリを使用するときに取得するコール スタック/フレームグラフを見ると、それらは正しくありません。
テストプログラムは次のとおりです。
そして、ここにフレームグラフがあります:
これは、Docker コンテナー内の Ubuntu 20.04 で次の手順によって生成されました。
これの主な問題点は、すべての関数が の子であるとは限らないことstupid_factorial
です__memcmp_avx2_movbe
。でdwarf
、彼らはです。より複雑なプログラムでは、これらのような関数が outside にあることさえ見てきmain
ました。__dynamic_cast
たとえば、多くの場合、親を持たないものです。
ではgdb
、ここで正しく表示されない関数を含め、常に正しいバックトレースが表示されます。自分でコンパイルせずに正しいfp
呼び出しスタックを取得することは可能ですか (これは大変な作業のようです)?libstdc++
他にも奇妙な点がありますが、Ubuntu 18.04 (Docker コンテナーの外部) では再現できませんでした。
- に未解決の機能があり
libstdc++.so.6.28
ます。 - 私自身のバイナリには
6_stl.bin
、左端に未解決の関数があります。の場合も同様dwarf
です。