Raspberry Piによる電子工作と断酒の日記 野球関連の日記、読書感想文とか

Linuxでのソーストレース

読み方だとかっこ悪いので、ソーストレースに言い直します。
前回はトレースの有用性を書いたので、今回はトレースの実践を書いてみます。

統合開発環境がある場合は、それを使ってトレースするのがいいのでしょうが、私は使ったことがないので、古臭い方法でやっています。



viを使ったソーストレース

ctagsコマンドでタグ付け

$ ctags -R ディレクトリ

などヘッダを含む全てのソースにtag付します。


そのあと、viでファイルを参照します。

$ vi 見たいソースコード


参考ソースを以下に記載しますが、小さいので、大きめのソースで
やったほうが、有用性が理解出来るかもしれません。

void foo(void);

int main(void)
{
    foo();

    return 0;
}

void foo(void)
{
    printf("bar");
}    

この場合、fooを読んでる個所でCtrl+5を押すと関数の先頭に、Ctrl+Tで元の場所に移動できます。
外部にある関数でも、define定義にも飛べます。
C++のクラス名ならクラスにも飛べます。
構造体定義にだって飛べちゃう。
基本中の基本すぎますが、これだけで大半のソースコードは早く読めます。

あとは、grepを駆使して探す方法もあります。
これはある程度条件が絞られている時に使ったりしています。

IDE使ったほうが早いのかもしれませんが会社が
買ってくれないし、使わせてくれないので、
この方法に慣れてしまいました。
が、逆に言うとシンプルが最速なのではと思っています。

プログラミングは基本的に処理が3つしかないです。
判定、繰り返し、転送
これらが絡み合って処理が動いています。
なので、ただひたすらにその処理を追っていくことで、機能が理解出来、新規に作る必要があるか?
流用可能かを考えながら全体像を見ています。
大半は一部の機能理解するためにやっていますが。

下準備もほとんどないと言ってもいいようなものですし、viでのトレースは本気で読むとき、斜め読みするとき、
どちらも手間がかからずサクサクできるので、非常におすすめです。