当我调试一个程序时,我常常发现在调试程序时遍历堆栈并为我遇到的任何对齐指针大小的值获取符号是很有用的。我已经厌倦了手工操作,所以我尝试编写一个命令来完成它。问题是,当通过指针取消引用设置参数时,"info符号“似乎不喜欢使用方便的变量作为参数。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)为什么会这样呢?这是个虫子吗?有什么不同的方法吗?
谢谢!
Luc
PS:使用香草GDB 7.5
从列表中更新:
这很可能是个bug。
发布于 2012-11-25 18:44:27
不管是否有错误,我建议使用带有p和x命令的/a格式说明符。这对我来说总是有效的,而且打字也更快。
https://stackoverflow.com/questions/12940845
复制相似问题