Core吐かせてみよう

今日はトンデモな実験。というかここ数年Core吐かせてないのでデバッグ用にわざと吐かせてみた。

#include
int main(){
int i=0;int j=1;int k=0;
printf(“i=%d,j=%dn”,i,j);
k=j/i;
printf(“k=%dn”,k);
return 0;
}

コンパイル
> gcc -o fault fault.c

実行
> ./fault
i=0,j=1
Floating exception (core dumped)

まぁ酷いプログラムです。
実行すればたちまち0除算が原因でcoreを吐きます。
今までWindowsも含めてコアダンプを利用した解析なぞやったこと無かったので、バイナリエディタで開く…。全く読めない。そこで調べていたらgdbコマンドを使えば直ぐにわかるという。これがあれば解析のためにガリガリファイルにログを書き出さなくていいかもです。

まずは試しに実行。(実行ファイル名はfaultでコアダンプはfault.coreです)

> gdb fault fault.core
#0 0x0804854e in main ()

main関数でダウンしたことがわかります。

今度はデバッグモードでコンパイル(特に再実行してコアを更新する必要はなさそうです)
> gcc -g -o fault fault.c
> gdb fault fault.core
#0 0x0804854e in main () at fault.c:8
8 k=j/i;

なるほど、fault.cの8行目で停止したことがわかります。