13

コードをプロファイリングしたい。私もです:

valgrind --tool=callgrind my_program [programm arguments]
kcachegrind callgrind.out.x

今、私はkcachegrindこのようなウィンドウを持っています:

ここに画像の説明を入力

多くのコア関数とライブラリ関数がありますが、コード内にある関数のみを設定valgrindまたはトレースするにはどうすればよいですか (もちろん、ライブラリ関数を呼び出します)。kcachegrind

予想される出力は次のようなものです。

  time  number of calls            function_name()
  4,52%  569854          CSim2Sim  my_function1(int argc, char* argv[])
  3,52%  452158          CSim2Sim  my_function2(int argc, char* argv[])
  3,52%  36569           CSim2Sim  my_function3(int argc, char* argv[])
  1,52%  1258            CSim2Sim  my_function4(int argc, char* argv[])
4

4 に答える 4

5

[表示] -> [グループ化] に移動し、[ELF オブジェクト] を選択します。対応するツールビューで、アプリケーション/ライブラリ ELF オブジェクトを選択すると、それらの関数のみが表示されます。

ただし、目的の出力を取得することはできません。Valgrind で時間を測定することはできません。Valgrind は命令をカウントするだけで、サイクル カウントとキャッシュ ミスを見積もることができます。また、callgrind は完全な関数シグネチャを表示しません。常に引数を削除し、関数名のみを表示します。

于 2016-11-07T09:26:04.890 に答える
1

探しているものに最も近いのは、おそらくグループ化です。ツールバー: 表示 -> グループ化。次に、ソース ファイルごとまたは ELF オブジェクトごとのいずれかを選択できます。前者はソース ファイルのリストを提供し、そこで作成したファイルを選択できます。後者はオブジェクトのリストを提供します。ほとんどの場合、ライブラリと実行可能ファイルの名前のオブジェクトです。それを選択すると、ソース コードで行われた呼び出しのリスト。

于 2016-11-07T08:54:15.663 に答える