7

我经常发现在调试程序并获取遇到的任何正确对齐的指针大小的值的符号时,遍历堆栈很有用。我已经厌倦了手动执行此操作,因此我尝试编写一个为我执行此操作的命令。问题是“信息符号”似乎不喜欢在通过指针取消引用设置其参数时使用便利变量作为其参数。IE:

(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

不管有没有错误,我建议将 /a 格式说明符与 p 和 x 命令一起使用。这总是对我有用,而且打字也更快。

于 2012-11-25T18:44:27.553 回答