Yabu.log

ITなどの雑記

GDBのコマンド

GDBの動かし方について。

オンラインで試せるGDBがあったので遊び倒して見た。

GDB online Debugger | Compiler - Code, Compile, Run, Debug online C, C++

よく使う(使った)コマンドなどをまとめた。

シンボルファイル関連は後日やりたい。

コマンド 省略形 意味
set disassembly-flavor intel - アセンブラの表示をintelのものにできる
list [<行数>|<関数名>] l 関数または行数から10行周辺のソースを表示
break [<行数>|<関数名>] b 関数、または行数の位置にブレークポイントを置く
clear [<行数>|<関数名>] 関数、または行数の位置のブレークポイントを削除する
dlete bnums ... 指定されたブレークポイント番号のブレークポイントを削除する
step s シンボルファイルで紐付いたプログラムを1行実行(関数の中に入る)
stepi si 単一の機械語を一命令実行
next n シンボルファイルで紐付いたプログラムを1行実行(関数は中に入らない)
nexti ni 単一の機械語を一命令実行、サブルーチンはリターンするまで実行する
backtrace bt 関数の呼び出しトレースを表示
print <変数名> p 変数の内容を表示。&をつけてアドレスを表示したり*を付けて値参照したりできる。

メモリダンプのコマンド

  • x/<量><単位><表示形式> <アドレス>
    • 量:数字
    • 単位
      • b=1Byte
      • h=2Byte
      • w=4Byte
      • g=8Byte
    • 表示形式
      • x=符号なし16進数
      • d=符号付き10進数
      • u=符号なし10進数
      • o=符号なし8進数
      • a=絶対アドレス?
      • c=文字定数
      • f=浮動小数点(単位がw,gの時のみ有効)
      • s=文字列(null文字までを1単位とする)
      • i=機械語

起動時に -ex <ファイルまたは''囲いのコマンド>オプションをつける事で起動時にgdbにコマンドを実行させられる。

自分の場合はqemuで1234ポートでgdbサーバーを起動した後、クライアント側のgdbgdb -ex 'target remote localhost:1234'とコマンドを打つ事ですぐさまデバッグが始められる。*1

他メモ

Macではbrewで入れたGDBをそのまま動かせなかった

qiita.com

見やすいGDBのUI。良さそう

qiita.com

.gdbinitの設定方法

gdbで初期設定をAT&T記法からIntel記法に変更する方法 | サラリーマンがハッカーを真剣に目指す

*1:もちろん起動時に行いたい長ったらしい処理をファイル外だしにして引数に与えることも可能