sttsのソースコードMemoブログ

色々やってみた結果のMemo

gdbの変数の表示設定方法

変数の値を表示

変数の値の表示は、printコマンドを使います。省略は、pです。

変数bの値を見る場合
(gdb) print b
$20 = 97
変数bをcharとして見る
(gdb) p/c b
$21 = 97 'a'

"p/c"の"/"の後ろには、出力フォーマットを指定します。
出力フォーマットは以下です。

  • x→16進で表示
  • d→符号付き10進で表示
  • u→符号なし10進で表示
  • o→8進で表示
  • c→文字として表示
  • f→浮動小数点として表示
  • s→たぶん文字列として表示

printfのフォーマットとそっくりです。

メモリの内容表示

メモリの内容を表示する場合、xコマンドを使います。

"0x8048560"のメモリの内容を表示する。
(gdb) x/s 0x8048560
0x8048560: "Hello World %d %d\n"

xコマンドは、使用しているメモリの大きさを指定するオプションがあります。

"short c=123;"の値を参照する。
(gdb) print c
$1 = 123
変数cのアドレスを参照する。
(gdb) print &c
$2 = (short int *) 0xbfdf55ee
変数cのアドレスの内容を整数として表示する。
(gdb) x/d 0xbfdf55ee
0xbfdf55ee: 1443889275
↑変数cは、shortだけどデフォルトのint分4Byteの内容を表示してしまっている。

変数cのアドレスの内容を2Byte分表示する。(shortは2Byte)
(gdb) x/hd 0xbfdf55ee
0xbfdf55ee: 123

大きさを指定する単位は以下です。

  • b→1Byte
  • h→2Byte
  • w→4Byte(デフォルト)
  • g→8Byte

実行時に変数の値を変更する

gdbデバッグ中に変数の値を変更するにはset variableコマンドを使います。

(gdb) print c
$3 = 123
(gdb) set variable c=456
(gdb) print c
$4 = 456