Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.3.2. GDB の実行

このセクションでは、以下の単純なプログラムを使った GDB の基本的な実行について説明します。
hello.c

#include <stdio.h>

char hello[] = { "Hello, World!" };

int
main()
{
  fprintf (stdout, "%s\n", hello);
  return (0);
}

以下の手順は、最も基本的な形式でデバッグプロセスを説明しています。

手順5.1 'Hello World' プログラムのデバッグ

  1. 以下のように、デバッグフラグを使った実行可能ファイルに hello.c をコンパイルします。
    gcc -g -o hello hello.c
    生成されるバイナリー hellohello.c と同じディレクトリーにあることを確認します。
  2. hello バイナリーで gdb を実行します (つまり gdb hello)。
  3. いくつかの導入部のコメントの後に、gdb はデフォルトの GDB プロンプトを表示します。
    (gdb)
  4. 変数 hello はグローバルであるため、メインの手順が開始する前に表示することができます。
    gdb) p hello
    $1 = "Hello, World!"
    (gdb) p hello[0]
    $2 = 72 'H'
    (gdb) p *hello
    $3 = 72 'H'
    (gdb)
    printhello[0] をターゲットとしており、 *hello には *(hello + 1) などのような式の評価が必要になることに注意してください。
    (gdb) p *(hello + 1)
    $4 = 101 'e'
  5. 次に、ソースをリストします。
    (gdb) l
    1       #include <stdio.h>
    2
    3       char hello[] = { "Hello, World!" };
    4
    5       int
    6       main()
    7       {
    8         fprintf (stdout, "%s\n", hello);
    9         return (0);
    10      }
    list は、fprintf 呼び出しが 8 行目にあることを示しています。その行にブレークポイントを適用して、コードを再開します。
    (gdb) br 8
    Breakpoint 1 at 0x80483ed: file hello.c, line 8.
    (gdb) r
    Starting program: /home/moller/tinkering/gdb-manual/hello
    
    Breakpoint 1, main () at hello.c:8
    8         fprintf (stdout, "%s\n", hello);
  6. 最後に、next コマンドを使用して、fprintf 呼び出しの後に進んでこれを実行します。
    (gdb) n
    Hello, World!
    9         return (0);
以下のセクションでは、GDB のより複雑なアプリケーションについて説明します。