cwnicol programming

プログラミング関連の投稿をすこしだけ

GDBデバッガの使い方

■主なコマンド

コマンド 意味
r 実行開始
s ステップイン
n ステップオーバー
fin ステップアウト
q gdb終了
p 値の表示(任意の式を実行することも可(※1))
x 値の表示
set 値の設定。pを使って設定してもよい。例)p hoge=1

※1 p memset(hoge, 0x00, sizeof(hoge)) など。


■その他コマンド

コマンド 意味
b [ソース名:]行数 ブレークポイント設定。
d すべてのブレークポイント、ウォッチポイントを削除
d [info bで出てくる番号] 該当ブレークポイントを削除
enable [番号] ブレークポイントを有効にする
disable [番号] ブレークポイントを無効にする
condition [番号] [式] ブレークポイントに条件を追加(式はaa == bb)
contidion [番号] 設定した条件を取り消す
display [式] 式の値を常に表示
watch [式] 式の値が変更されたら表示
undisplay [番号] displayを解除
whe, bt スタックを表示
up スタックを上へ移動
down スタックを下へ移動
info display 現在のdisplay設定を表示
delete display display設定削除
info b 現在のブレークポイント設定を表示
l 周辺ソースを表示
shell XXX bashコマンド XXXを実行
k 実行中プログラム終了
gdb --args hoge piyo.txt 引数つき実行


http://tsstudio.s12.xrea.com/mt/archives/2007/08/gdb.html

★print 
変数の値を変数の型に応じて表示します。変数 var の値を表示するときは、
print varのように指定します。 

/formatを付加すると出力書式を指定できます。 

書式 意味 書式 意味 
/o 8進 /d 符号付き10進 
/x 16進 /u 符号なし10進 
/t 2進 /c 文字 
/f 浮動小数点 /a アドレス 

変数 var の値を2進数で表示するときは、print/t varのように指定します。 
 
★x 
メモリの内容を表示します。printコマンドと同じ出力書式に加えて以下の出力書式と
繰り返し回数を指定できます。 
/s 文字列表示 
/i インストラクション表示(逆アセンブル変数 name の文字列表示は、x/s nameのように指定します。
メモリの指定領域0x1370の逆アセンブルは、x/5i 0x1370のように指定します。 

http://www.swlab.it.okayama-u.ac.jp/man/gdb-4.18/gdb-ja_9.html

set print pretty on 
構造体を表示する際に、インデントされた形式で1行に1メンバずつGDBに表示させます。
以下に例を示します。 
$1 = {
  next = 0x0,
  flags = {
    sweet = 1,
    sour = 1
  },
  meat = 0x54 "Pork"
}

set print pretty off 
構造体を詰め込み形式でGDBに表示させます。以下に例を示します。 
$1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \
meat = 0x54 "Pork"}

これがデフォルトの形式です。 
show print pretty 
GDBが、構造体を表示するのにどちらの形式を使用しているかを示します。