我经常发现,当我调试程序并且遇到任何正确对齐的,指针大小的值的符号时,遍历堆栈很有用。我已经厌倦了手动执行此操作,因此我尝试编写一个命令来为我完成此操作。问题是“信息符号”似乎不喜欢在通过指针取消引用设置其参数时使用便利变量作为其参数。 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:使用vanilla GDB 7.5
从列表中更新:
这很可能是一个错误。
答案 0 :(得分:1)
错误与否,我建议使用带有p和x命令的/ a格式说明符。这对我来说总是有用,而且输入速度也快。