Segmentation faultが頻発

オムレツ

非常に不安定なプログラムでSegmentation faultが頻発するような場合、常にそのプログラムをgdb上で動かしてSegmentation faultに備えておくのはどうか。もちろん、デバッグする気がある場合の話だけど。
サンプルプログラムa.cをコンパイルして実行してみる。このサンプルプログラムでは、Segmentation faultが発生するようにバグを埋め込んでいる。

$ cat a.c
#include <stdio.h>

int
main(int argc, char *argv[])
{
    int i;
    
    for (i = 0; i < argc; i++) {
        printf("%d: <%s>\n", i, argv[i]);
    }

    *((int *) NULL) = 123; /* => Segmentation fault */

    return 0;
}
$ gcc -g a.c
$ ./a.out a b c
0: <./a.out>
1: <a>
2: <b>
3: <c>
zsh: segmentation fault (core dumped)  ./a.out a b c

gdb用のスクリプトa.out.xを用意して、gdb上で実行してみる。サンプルプログラムの引数は、a.out.x内に記述する。

$ cat a.out.x
run a b c
bt
$ gdb -q -x a.out.x a.out
0: </tmp/aa/a.out>
1: <a>
2: <b>
3: <c>

Program received signal SIGSEGV, Segmentation fault.
main (argc=4, argv=0xbfbff584) at a.c:12
12          *((int *) NULL) = 123; /* => Segmentation fault */
#0  main (argc=4, argv=0xbfbff584) at a.c:12
#1  0x08048572 in ___start ()
12          *((int *) NULL) = 123; /* => Segmentation fault */
13
14          return 0;
15      }

と、ここまで書いて思ったけど、別にcoreを解析すればそれで充分な気もしてきた。