pingを読み進める上で残したメモです。
pingのビルド方法
inetutilsのソースからpingをビルドする手順は、以下のコマンドを入力するだけ。
$ tar zxvf inetutils-1.5.tar.gz $ cd inetutils-1.5 $ ./configure $ make
これでpingコマンドがpingディレクトリに保存される。以降、pingソースを変更した場合はpingディレクトリ下でmakeするだけでオーケー。
※autotoolがよく分かっていないので、ping/Makefileの生成ルールが分からない。ビルド対象のファイルを追加するような場合は、とりあえずはping/Makefileを修正して対応するしかないか・・・。
ちなみに、ここで
make install
までしてしまうと、既存のコマンドを入れ換えてしまうので注意(入れ換えた方がむしろ良いときもあるけれど)。
pvtraceの使い方
関数のコールグラフを作成するには、IBMのdeveloperWorkの「Graphvizによるファンクション・コールの視覚化」で紹介・説明されているpvtraceを使うのが簡単・便利。
インストール・使用方法
インストールの手順は以下のとおり。なお可視化に必要なgraphvizについては、他のサイトが詳しいので説明を省く。
- pvtraceのダウンロード。Graphvizによるファンクション・コールの視覚化の末尾を参照
- 適当な場所でmake。pvtraceコマンドが生成される
- (必要に応じて)パスの通った場所にpvtraceをコピー
これによってpvtraceコマンドとターゲットに埋め込むソースinstruction.cが準備できる。
これらを用いた一般的な使用方法は以下のとおり。
- 対象のソースを、instruction.cと共にビルド
- gccへのオプションで、「-g」と「-finstrument-functions」を忘れないこと
- 対象ソース内にinstruction.c内のコードをコピペしても可
- ビルドしたプログラムを実行。実行後、カレントディレクトリにtrace.txtが生成される
- プログラムとtrace.txtが同じ場所にある状態で、「pvtrace <プログラム名>」を実行。graph.dot生成
- graphvizでgraph.dotをもとにグラフを作成
これだけ。graphvizの使い方は、Graphvizチュートリアルを見ると載っているので、後学のためにも一通り使えるようになっておくとよい。
今回の場合、inetutilsを./configureしたあとにできるping/Makefileに手を入れてコンパイルフラグを設定し、ping.c内の末尾にinstruction.cの内容をコピペすると簡単。
<ping/Makefile> CFLAGS = -g -O2 -finstrument-functions ← -finst~を追加
参考サイト
- Graphvizチュートリアル - Graphvizの分かりやすい説明が載っている
- IBMのdeveloperWork - 様々なジャンルの開発者向けに優良情報をコンスタントに(!)掲載している
- Graphvizによるファンクション・コールの視覚化 - pvtraceの使い方が載っている。pvtraceはそもそもこのサイトで紹介されているプログラム