Freescale MX51 ベースのボード Linux 2.6.35 で GUI を多用する C++ アプリケーションを開発しています。ヒーププロファイリングを実行したいと思います。
残念ながら、私が見つけたすべてのヒープ プロファイリング ツールは、侵入的すぎるか、表向きは ARM で動作しませんでした。私が試した特定のツール:
- Valgrind Massif : プラットフォームの CPU が弱いため、私のプラットフォームでは動作しません。Massif によって導入された 80% の CPU 時間のオーバーヘッドは、私のアプリケーションで補償できないさまざまな問題を引き起こします。
- gperftools (以前の Google パフォーマンス ツール) tcmalloc:ヒープ プロファイラーを除い
libc malloc()
て、このやや邪魔にならないライブラリ ベースの置換のすべての機能がターゲットで動作し言い換えると、スレッド キャッシング アロケーターは機能しますが、プロファイラーは機能しません。興味のある方のために、以下でプロファイラーの失敗モードについて説明します。
ARM プラットフォームで C++ ヒープ プロファイリングを実行するための一連の代替ツールを提案できる人はいますか? 理想的な出力は、最終的に gperftools の tcmalloc 出力と同様の有向割り当てグラフになります。リソースの使用率を低く抑えることは必須です。私のプラットフォームはリソースに非常に制約があります。
gperftools の tcmalloc の失敗モードの説明:
この情報は、興味のある方のみに提供しています。返事は期待しない。x86 ではなく ARM を除いて、以下の gperftools の問題 #407 に似た問題が発生しています。具体的には、「フックされたアロケータ フレームが見つかりません。空のトレースが返されました」というメッセージが常に表示されます。この問題のデバッグに時間を費やしたところ、tcmalloc ライブラリを動的にリンクすると、アプリケーションと動的ライブラリの間の境界にあるフレーム ポインタが null になり、スタックを動的ライブラリへの呼び出しの「上」に移動できないようです。
gperftools の問題 #407: https://github.com/gperftools/gperftools/issues/410
ARM で同様の問題が発生しているスタックオーバーフロー ユーザー: ARM の共有ライブラリでフレームが見つからない