4

私はしばらくの間、プロファイリング ツール valgrind を使用しています。実行するには実行可能ファイルが必要です。つまり、

$    valgrind ./a.out

動的にリンクされた GCC プラグインで使用し、プラグインで使用される各関数の所要時間と呼び出し回数をリストします。次のように GCC プラグインを実行しています。

$    gcc -fplugin=./plugin.so myfile.c

次のコマンドを実行すると、valgrind は gcc のメモリ リークのみを報告し、plugin.so のメモリ リークは報告しません。私のプラグイン (.so ファイル) でのみ valgrind を実行する方法が必要です。

$    valgrind gcc -fplugin=./plugin.so myfile.c

$    gcc -fplugin=./plugin.so myfile.c -wrapper valgrind

それは可能ですか?私はこれについてたくさん検索しましたが、具体的な答えは見つかりませんでした。

4

1 に答える 1

3

この質問を valgrind-users メーリング リストに投稿し、解決策を得ました。

http://sourceforge.net/p/valgrind/mailman/message/34174148/

プラグインは GCC 自体ではなく、GCC の子プロセスによって読み込まれます。したがって、オプション --trace-childen=yes を指定して valgrind を実行する必要があります。

 $valgrind –trace-children=yes --leak-check=full g++ -fplugin=./plugin.so test0.o

次に、valgrind の出力で関数の名前を検索し、プラグインのロードと実行を担当する子プロセスを特定する必要があります。プラグインに意図的にメモリ リークを導入し、出力で関数を検索して、処理する。

于 2015-06-08T05:35:18.580 に答える