ちゃっくのメモ帳

ちゃっくがメモしときたいことをメモしとくよ

GDBを使ったんだよ

GDBを使ってデバッグすると便利らしいけど意外と使う機会がなかった。
でもちょっと使う機会が出来たから今後使う時に困らないように使い方をメモっとく。

まずコンパイル時にファイルにデバッグ情報を追加して最適化を向こうにする。つまりコンパイルするときにコンパイルオプション-g -O0を付けておく。

これを付けてコンパイルされたプログラムを走らせる。
gdb a.out

ブレークポイントの設定

ブレークポイントを設定するのにはbreakコマンドを使えばよい。main関数に入るまで走らせるなら
(gdb)break main
とすればよく、行番号で指定したいなら
(gdb)break 行番号
とすればよい。
またbreakはbと省略することもできる。

実行

実行するには
(gbd) run
とすればプログラムが開始される。
関数の中を追いかけるときは
(gdb) step
関数の中を追いかけない時は
(gdb) next
とすればプログラムが1行ずつ実行されていく
次のブレークポイントまで一気に動かすのには
(gdb) continue
とすればよい。
これらはどれもn,s,cと省略することができる。

レジスタを見る

アセンブリレジスタの値を覗きたければ次のようにすれば良い
(gdb) print /x $eax
とすれば%eaxレジスタの値を16進数で覗くことができる。
もし10進数で見たければ/d,2進数で見たければ/tとすればよい。
また-8(%ebp)みたいなアドレスを指定して値を覗きたいときは次のようにすれば良い
(gdb) print /x *(int *)($ebp-8)pr
さらに汎用レジスタの値を全て見たいときは
(gdb) info register
とすれば良い。これはコマンド i rと省略することができる。

layout機能

GDBにとても便利な機能としてlayout機能がある。例えばアセンブリソースコードを見ながら進めたい時には
(gdb) layout  asm
とすればよく、レジスタの値を見たいならば
(gdb) layout regs
とすれば良い。ソースコードを見たいならば
(gdb) layout src
とすれば良い。

僕が今求めているもの

layoutとかで変数の一覧を監視するみたいなことができたらうれしいから誰か知ってたら教えてくださいな