7

プログラムをデバッグしているときにスタックを調べて、適切にアラインされたポインター サイズの値のシンボルを取得すると便利な場合がよくあります。これを手動で行うのにうんざりしたので、それを行うコマンドを書いてみました。問題は、「情報シンボル」が、そのパラメーターがポインター逆参照によって設定されたときに、そのパラメーターとして便利な変数を使用することを好まないように見えることです。いいえ:

(gdb) info symbol 0xb6ca4d28
[Useful Symbol Information]
(gdb) set $pointer = $esp
(gdb) while ( *(int*)$pointer != 0xb6ca4d28)
 >set $pointer += 4
 >end
(gdb) x/x $pointer
0x6ebee064:     0xb6ca4d28
(gdb) set $dereferencePointer = *(int *)$pointer
(gdb) p/x $dereferencePointer
$103 = 0xb6ca4d28
(gdb) info symbol $dereferencePointer
No symbol matches $dereferencePointer.
(gdb) set $dereferencePointer = 0xb6ca4d28
(gdb) p/x $dereferencePointer
$104 = 0xb6ca4d28
(gdb) info symbol $dereferencePointer
[Useful symbol information]
(gdb)

どうしてこれなの?これはバグですか?これを行う別の方法はありますか?

ありがとう!

リュック

PS: バニラ GDB 7.5 を使用

リストから更新:

これはおそらくバグです。

4

1 に答える 1

1

バグかどうかにかかわらず、pコマンドとxコマンドで/aフォーマット指定子を使用することをお勧めします。これは常に私にとってはうまくいき、入力も速くなります。

于 2012-11-25T18:44:27.553 に答える