Getting symbol information for value held in GDB convenience variable
我经常发现在调试程序时遍历堆栈并获取遇到的任何正确对齐的指针大小的值的符号很有用。我已经厌倦了手动执行此操作,因此我尝试编写一个为我执行此操作的命令。问题是,当通过指针取消引用设置其参数时,"信息符号"似乎不喜欢使用便利变量作为其参数。 IE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | (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
从列表更新:
这很可能是错误。
是否显示错误,我建议对p和x命令使用/ a格式说明符。这始终对我有用,并且键入速度也更快。