- tips.html#プログラミング,
- C Programming FAQs(by Steve Summit)
- nm : オブジェクトファイル内のシンボルを表示する.
どこで用いられているか調べるのに便利(nm -l).
- strings : オブジェクトファイル内の文字列を表示する.
- ヘッダ中の文字列を探す: grep -r -I -H -n -E '文字列' /usr/include
- ldd : 共有ライブラリへの依存関係を表示.
検索順:
- 環境変数 LD_PRELOAD
- 環境変数 LD_LIBRARY_PATH, LD_AOUT_LIBRARY_PATH
- キャッシュファイル /etc/ld.so.cache
(/etc/ld.so.conf でパスを定義し ldconfig でキャッシュを作る.)
- /usr/lib
- /lib
- 環境変数 LD_AOUT_PRELOAD
(c.f. ld.so(8), ldconfig(8) )
- gprof : gcc コンパイラオプションで -pg を用いる.
$ cc -pg sample.c
$ gprof -b a.out
- gdb : gcc コンパイラオプションで -g 又は -ggdb を用いる.
M-x gdb (emacs gdbモード)
$ cc -ggdb sample.c
$ gdb a.out
- ワイルド ポインタの検出:
ワイルド ポインタ, 特に ダングリング リファレンスは,
メモリ領域の再利用のタイミングと関連しあって
再現や検証が難しいメモリ破壊(memory smash)バグの原因となる.
- free の直後にポインターを NULL で初期化 (free(p); p=NULL;)
- Electric Fence を用いる.
領域の overrun (入出力の buffer overrun, p=malloc(strlen(s)) とか) による
メモリー破壊の検出.