ホーム > 環境・ユーティリティ > gdb

gdb: GNUデバッガ

gdb (GNU Debugger)는 C, C++, Fortran 등 다양한 프로그래밍 언어로 작성된 프로그램의 실행을 분석하고 디버깅하는 강력한 도구입니다. 프로그램의 내부 동작을 이해하고, 버그를 찾아 수정하는 데 필수적입니다. 실행 중인 프로세스에 연결하거나, 코어 파일을 분석하는 등 다양한 디버깅 시나리오를 지원합니다.

概要

gdbは、プログラムの実行フローを制御し、変数値を検査し、メモリ状態を確認するなど、詳細なデバッグ機能を提供します。特にコンパイルされたバイナリファイルの問題を分析するのに役立ちます。

主な機能

  • 実行中のプログラムの開始/停止
  • ブレークポイントの設定
  • 変数値の検査と変更
  • スタックトレースの確認
  • メモリ内容の検査
  • コアファイルの分析

主なオプション

gdbは対話モードで主に使われますが、起動時に特定のオプションで初期設定を行ったり、非対話スクリプトを実行したりできます。

起動/接続オプション

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`gdb` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

gdbは対話的に使用されることが多いので、例ではgdbプロンプト内で入力するコマンドも含まれています。

基本デバッグセッション開始

gdb ./my_program

コンパイルされたプログラム (例: my_program) をgdbでロードしてデバッグセッションを開始します。

ブレークポイント設定と実行

gdb ./my_program
(gdb) b main
(gdb) r

main関数にブレークポイントを設定してプログラムを実行します。ブレークポイントで実行が停止します。

変数値の確認

gdb ./my_program
(gdb) b my_function
(gdb) r
(gdb) p my_variable

ブレークポイントで停止した後、特定の変数の現在の値を出力します。

コアファイル分析

gdb ./my_program core.dump

プログラムのクラッシュで生成されたコアファイルを使用して、クラッシュ時のプログラムの状態を分析します。

実行中のプロセスに接続

gdb -p 12345

既に実行中のプロセスID (PID) 12345にgdbを接続してデバッグします。

起動時にコマンド自動実行

gdb -ex 'b main' -ex 'r' ./my_program

gdb起動と同時にmain関数にブレークポイントを設定してプログラムを実行します。

インストール

gdbはほとんどのLinuxディストリビューションでデフォルトで提供されておらず、開発ツールパッケージの一部としてインストールする必要があります。

Debian/Ubuntu

sudo apt update && sudo apt install gdb

APTパッケージマネージャーを使用してgdbをインストールします。

Fedora/CentOS/RHEL

sudo dnf install gdb

DNFまたはYUMパッケージマネージャーを使用してgdbをインストールします。

ヒントと注意点

gdbを効果的に使用するためのヒントと注意点です。

コンパイル時にデバッグ情報を含める

gdbでデバッグするには、プログラムを `-g` オプションでコンパイルしてデバッグ情報を含める必要があります。そうしないと、ソースコード情報や変数名を表示できません。

  • 例: `gcc -g myprogram.c -o myprogram`

よく使うgdbコマンド

gdbプロンプト内でよく使われる主要なコマンドです。

  • `b <関数名/行番号>`: ブレークポイント設定 (breakpoint)
  • `r`: プログラム実行 (run)
  • `n`: 次の行へ移動 (next)
  • `s`: 関数内へステップイン (step)
  • `p <変数名>`: 変数値を出力 (print)
  • `c`: 次のブレークポイントまで実行 (continue)
  • `q`: gdb終了 (quit)

TUIモードの活用

gdbのテキストユーザーインターフェース (TUI) モードを活用すると、ソースコード、レジスタ、アセンブリなどを一緒に表示しながらデバッグ効率を高めることができます。

  • `gdb -tui <program>` またはgdb内で `layout src` コマンドを使用

同じカテゴリのコマンド