获取 GDB 便利变量中保存的值的符号信息

Posted

技术标签:

【中文标题】获取 GDB 便利变量中保存的值的符号信息【英文标题】:Getting symbol information for value held in GDB convenience variable 【发布时间】: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上运行良好 【参考方案1】:

Bug 与否,我建议将 /a 格式说明符与 p 和 x 命令一起使用。这总是对我有用,而且打字速度也更快。

【讨论】:

以上是关于获取 GDB 便利变量中保存的值的符号信息的主要内容,如果未能解决你的问题,请参考以下文章

gdb - 获取寄存器的变量名

如何告诉gdb'优化输出值'的值或使其推断出值?

GDB使用——pwn相关

Java中数组获取最大值

在 x86 上使用 GDB 而不调试符号?

jquery radio选中值的保存问题