gdbの簡単な使い方

  • 実行
gdb exec_file corefile
  • コールスタック*1の内容表示
(gdb) bt ((backtrace の略))
#0  0x007e2663 in strlen () from /lib/tls/libc.so.6
#1  0x007b6525 in vfprintf () from /lib/tls/libc.so.6
#2  0x0804bee2 in functionname (fmt=0x80851000 "]") at main.c:186
  • 知りたい関数までさかのぼりーの*2
(gdb) frame 2
#2  0x0804bee2 in functionname (fmt=0x80851000 "]") at main.cc:186
186       (void) vfprintf (log_fp, fmt, ap);
  • 周辺のソース表示
(gdb) list
181
182       buf[len] = '\0';
183       fprintf (log_fp, "%s: ", buf);
184
185       va_start (ap, fmt);
186       (void) vfprintf (log_fp, fmt, ap);
187       va_end (ap);
188       fprintf (log_fp, "\n");
189
190       fclose (log_fp);
  • 変数の内容表示
(gdb) p buf  ((pはprintの略))
$1 = "Fri May  2 00:00:00 "

という感じでデバッグする。

*1:Windowsではそう呼んでいたんだけど、gdbでもいいのかな?

*2:フレーム移動