関数によって行われた読み取り書き込みの数を確認したいと思います。たとえば、私のcプログラムにはmain()とは別に呼び出される2つの関数があり、両方の関数が読み取り/書き込みアクティビティ(またはIO操作のシステムコール)を提供します。ここで、IOの観点から両方の機能を比較分析したいと思います。
助けてください、ありがとう
関数によって行われた読み取り書き込みの数を確認したいと思います。たとえば、私のcプログラムにはmain()とは別に呼び出される2つの関数があり、両方の関数が読み取り/書き込みアクティビティ(またはIO操作のシステムコール)を提供します。ここで、IOの観点から両方の機能を比較分析したいと思います。
助けてください、ありがとう
ラッパーが呼び出されたときにカウンターをインクリメントするように、IO関数の周りにラッパーを記述します。例:
void custom_read(int *counter) {
*counter++;
real_read();
}
/* ... */
int read_counter = 0;
custom_read(&read_counter);
custom_read(&read_counter);
...
custom_read(&read_counter);
これは基本的に、コード カバレッジ分析、コール グラフ トレース、およびプロファイリングを組み合わせたものです。
使用するツールは OS に大きく依存しますが、一般的な考え方は同じです。
コール グラフジェネレーターを使用して、分析する関数をトリガーするすべてのコード パスを見つけます。次に、プロファイラーを使用して、別の関数による関数の呼び出しをカウントします (たとえば、関数が functionfoo
を呼び出すすべてのイベントをフィルター処理できますbar
)。これで、コード カバレッジ分析を使用して、コードの領域に費やされた CPU サイクルの分布を確認できるようになりました。
読み取り関数と書き込み関数をラップし、読み取り関数と書き込み関数をターゲットプログラムのラッパーに置き換える必要があります。