メモの日々


2004年01月06日(火) [長年日記]

[unix][howto] カレントディレクトリから再帰的に辿って文字列の検索をする

定番だけれどすぐ忘れるのでメモしておく。find を覚えられないんだよな。

grep -r 文字列 .

が一番簡単。ただ、検索対象のファイルを絞り込めないのでカレント以下にファイルがたくさんある場合は不便。また、-r オプションがサポートされていない場合もある。

find . -name '*.c' -print | xargs grep 文字列

のようにすれば検索対象のファイルを絞り込める。find で検索対象を絞り込み、その結果を xargs を使って grep に渡している。手元の環境では「-print」を書かなくても動いた。

find . -name '*.c' -exec grep 文字列 {} \; -print

のようにすれば xargs がない場合でもOK。が、「{} \;」のようなおまじないが必要になるので覚えにくい。この場合は「-print」を書かないとだめ(ファイル名が表示されない。grepの実装に依存するのだろうが)。

[c] …

プログラムが動かなくて ずーーーーーーーーーーーーーーーーーーーーーっと調べていた。結局、

malloc(size);

とすべき所を

malloc(sizeof size);

と書き間違えていたのが原因だった。何度も何度も何度もソースを見直したのに何故に気付かないのだ。もーーー。

何を教訓とすればいいのだろうか。gdbでステップ実行しているときに気付いたので、はまったらステップ実行せよ、ということか。普通だ。

[c][howto] gdb

せっかくなのでこれまたすぐ忘れるgdbの使い方をメモ。

gdb 実行プログラム

でgdb起動。起動したら

(gdb) break 関数名

でブレイクポイントを設定。

(gdb) run 引数

でプログラム開始。ブレイクポイントを設定してあればそこで止まる。

(gdb) step

でステップ実行。これは関数の中に入っていく。関数の中に入りたくないときは

(gdb) next

とする。

(gdb) print 変数名

で変数の内容を表示できる。

(gdb) list

で周辺のソースを表示できる。

(gdb) continue

で次のブレークポイントまで一気に進む。

(gdb) quit

でgdb終了。

とりあえずこれくらいしか使わなかった。

生活

  • おや、Googleのデザインが変わっている。
本日のツッコミ(全2件) [ツッコミを入れる]
tito (2004年01月08日(木) 00:08)

「grep 文字列 aFile」 <br>と 「grep -h 文字列 someFiles」 <br>と 「grep 文字列 aFile /dev/null」の違いかな。参考<br>http://homepage3.nifty.com/ymakise/old/unixtips/general.html

小川 (2004年01月08日(木) 10:55)

/dev/null を書く理由はファイル名を表示させるためなのですね。なるほど。