My開発メモ

gdbの便利な使い方-コマンド

『実践デバッグ技法』を読んでたら、おもしろいことが書かれてあったので、メモしておく。

サンプルコード fibonacci.c
#include <stdio.h>
int fibonacci(int n);

int main(void)
{
  printf("Fibonacci(3) is %d.\n", fibonacci());
  return 0;
}

int fibonacci(int n)
{
  if (n <= 1)
    return 1;
  else
    return fibonacci(n-1) + fibonacci(n-2);
}

これをコンパイルして、gdbを起動。

$ gcc -g fibonacci.c
$ gdb a.out

ブレークポイントを設定する。
ここでは関数名を指定している。

(gdb) break fibonacci
Breakpoint 1 0x80483e0: file fibonacci.c, line 13.

ブレックポイント番号を指定してコマンドを実行できる。

(gdb) commands 1
Type commands for when breakpoint 1 is hit, one per line.
End with a line saying just "end".
>silent
>printf "fibonacci was passed %d.\n", n
>continue
>end
(gdb)

これを実行すると、次のようになる。

(gdb) run
Starting program: <path>/a.out 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
fibonacci was passed 3.
fibonacci was passed 2.
fibonacci was passed 1.
fibonacci was passed 0.
fibonacci was passed 1.
Fibonacci(3) is 3.
[Inferior 1 (process 8761) exited normally]

これは、次のように実行されたことを表している。

参考

『実践デバッグ技法』p84
Norman Matloff / Peter Salzman 著
相川 愛三 訳
オライリージャパン
2011年2月21日 初版第3刷

カテゴリー: C, memo

タグ: gdb, コマンド, デバッグ

カウント: 26