最終更新:2026-10-12
GDB で C++ プログラムをデバッグ¶
GNU Debugger(GDB)で C コードをデバッグするとき、それが UNIX システム上で最も人気のあるデバッガであり、C と C++ プログラムのデバッグに使われていることがわかります。以下は、GDB を使って C コードをデバッグする方法をわかりやすく説明したものです:
まず、コマンドラインでコードが含まれる現在のフォルダに移動し、次のコマンドを実行します:
gcc -g -Wall code.c -o output
ここで、-g オプションは GDB ツールを使用するために必要です。-Wall オプションは警告情報を表示するために使われます。これにより "output" という名前の実行ファイルが作成されます。
次に、次のコマンドを実行して GDB ダイアログを開き、output ファイルからシンボル情報を取得します(簡単に言えば、code.c をデバッグするための環境全体を設定します):
gdb output
以下のコマンドがデバッグの助けになります:
list:ソースコードを一覧表示します。b x:x の位置にブレークポイントを設定します。x にはモジュール名や行番号を指定できます。例えば、main などの関数名も指定できます。r:プログラムを(ブレークポイントまで)実行し、結果を提供します。つまり、ブレークポイントでコードを実行して結果を生成します。[引数がある場合は r 引数1 引数2 引数3 ... となります]info breakpoints x:ブレークポイント x の詳細情報を表示します。info breakpoints:すべてのブレークポイントの詳細情報を表示します。delete x:ブレークポイント x を削除します。disable xとenable x:ブレークポイント x を無効化・有効化します。print p:変数 p の値を出力します。display p:実行のたびに変数 p の値を表示します(この一連の処理を自動化します)。c:プログラムの実行を続行します(for ループなどの反復をスキップ)。c-iter1で最初の反復をスキップし、再びcを入力すると2番目の反復をスキップします。以降も同様です。- 追加の条件を使うこともできます。例えば
b x if (y > m)は、y の値が m より大きい場合に x 行目でブレークポイントを設定するという意味です。 - GDB は複数のファイルにブレークポイントを設定することもできます。例えば、program.c が function.c の中の関数を呼び出している場合、
b function.c:xを使って function.c の x 行目にブレークポイントを設定できます。 bt:コード実行の経路をバックトレースするために使います。btはインデックス付きのリストを表示し、コードが経由したプロセスを示します。例:#0 プロセス0の説明、#1 プロセス1の説明のようになり、0 が最も最近のプロセスです。f xと入力するとプロセス x に移動し(f 0はプロセス0に移動)、対応する関数実行時の変数の値を表示します。s:関数の中に入り、より詳細な情報を取得するために使います。next:コードを1行ずつ実行するために使います。
関連トピック¶
- Bazel で C++ プロジェクトをビルド | C++那些事
- Bazel と LLDB の連携デバッグ | C++那些事
- CMake 入門と実践 | C++那些事
- Conan C++ パッケージ管理入門 | C++那些事
- C++ Insights によるコンパイル期観察 | C++那些事
- C++ Jupyter Notebook インタラクティブ | C++那些事
- C++ string から int への変換 | C++那些事
- C++ dbg-macro デバッグマクロ | C++那些事
- GCC コンパイルオプション詳解 | C++那些事
- GDB Python 拡張デバッグ | C++那些事