acidでバックトレース

では,落ちた時点のバックトレースを見てみよう.アタッチしたいプロセスのPIDを引数にacidを起動する.stk()でバックトレースが表示される.libcの_mainからmainが呼ばれ,fooで止まっているのがわかる.

term% acid 266
/proc/266/text:386 plan 9 executable

/sys/lib/acid/port
/sys/lib/acid/386
acid: stk()
foo()+0x5 /usr/oraccha/src/fail.c:7
main()+0x5 /usr/oraccha/src/fail.c:12
_main()+0x31 /sys/src/libc/386/main9.s:16
acid:

foo+5番地で落ちているので,ソースリストを表示してみると,予想通りp[0] = 1を指している.

acid: src(foo+5)
 2  #include <libc.h>
 3
 4  void
 5  foo(void) {
 6      int *p = 0;
>7      p[0] = 1;
 8  }
 9
 10 void
 11 main() {
 12     foo();