読者です 読者をやめる 読者になる 読者になる

GDBのまとめ

かなり自分用

  • 起動・終了など
コマンド 備考
起動 gdb プログラムファイル
coreファイル付きで 起動 gdb プログラムファイル core
実行中のプロセスをデバッグする gdb プログラムファイル プロセスID
実行中のプロセスをデバッグする attach プロセスID
実行中のプロセスのデバッグを止める detach
終了 quit
  • 設定など
コマンド 備考
環境変数表示 show environment [環境変数名]
環境変数設定 set environment 環境変数名 [=] 値
環境変数削除 unset envirnment 環境変数
コマンド 備考
1行実行(関数の中に入らない) n
1行実行(関数の中にステップイン) s
1行実行(ループの1巡目は1行ずつ。その後ループの最後まで実行) u
関数の最後まで実行 fin
変数の値を設定 p 変数=値
関数呼び出し call 関数
フレームの移動 up, down, f 番号
現在のフレームの表示 frame
mainからのスタックトレース where, bt
ローカル変数の表示 info local
  • ブレイクポイント
ブレイクポイント設定 b 関数名
ブレイクポイント設定 b 行番号
条件付きブレイクポイント設定 b 行番号 if 条件
ブレイクポイント一覧 info b
ブレイクポイント削除 delete b
ブレイクポイント削除 clear 関数、行番号、ファイル名:行番号など
ブレイクポイントまで実行 c
ブレイクポイントまで条件つきで実行 cond ブレイクポイント番号 条件 例:iが10の時のみ停止 cond 3 i==10
  • ウォッチポイント

マルチスレッドの場合には、カレントスレッドしか対象にならない。

ウォッチポイント設定 watch 変数名 変数の値が変化したときだけ停止する
ウォッチポイント一覧 info watchpoints
  • プロセス、スレッド
プログラム状態に関する情報を表示する info program
デバッグしているプロセスに関する情報を表示する。 info proc [mappings,times,id,status,all]
スレッド一覧 info threads
スレッド切り替え thread 番号
スレッドを指定してブレイクポイントを設定 break ファイル:行 thread スレッド番号
スレッドを指定してブレイクポイントを条件付きで設定 break ファイル:行 thread スレッド番号 if 条件
  • シグナル
シグナル送信 signal シグナル番号
シグナル一覧 info signals
シグナル受信時の動作設定 handle signal (stop,nostop,print,noprint,pass,nopass)
  • その他
コマンド 備考
shellコマンド実行 shell <コマンド>
カレントディレクトリの移動 cd directory
カレントディレクトリの表示 pwd
ディスアセンブル disassemble [開始行] [,終了行]
static 変数の表示 p filename::変数名
static 変数の表示 p 関数名::変数名
配列の表示 p 配列@長さ p a@3
型の表示 whatis exp
型の表示 ptype exp
  • マクロ
変数設定 set $変数名=値 set $i=0
変数の利用 p array[$i++]->val
fork時の動作 set follow-fork-mode parent又はchild show follow-fork-mode で現在のモードを表示
fork時の動作 set detach-on-fork on又はoff offにすると親プロセス子プロセス両方がGDBでコントロール可能
  • 初期化ファイル .gdbinit

このファイルに毎回実行するコマンドを記述しておくと起動時に実行される。