【发布时间】:2012-10-17 18:25:15
【问题描述】:
我经常发现在调试程序时遍历堆栈并为遇到的任何正确对齐的指针大小的值获取符号很有用。我已经厌倦了手动执行此操作,因此我尝试编写一个为我执行此操作的命令。问题是当通过指针取消引用设置参数时,“信息符号”似乎不喜欢使用便利变量作为参数。即:
(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
从列表更新:
这很可能是一个错误。
【问题讨论】:
-
也许
gdb相关的邮件列表可能是一个更好的提问地点。 -
跟进:由于没有找到与 freebsd-questions 等效的 gdb,我确实将此问题发布到了一般 gdb 列表,但尚未得到回复。如果我这样做,我会更新问题。
-
作为记录,这似乎在
GNU gdb (GDB) 7.3.50.20111117-cvs-debian上运行良好