这是我的C代码
C:\Codes>gdb var -q
Reading symbols from C:\Codes\var.exe...done.
(gdb) list
1 #include<stdio.h>
2
3 int main()
4 {
5 int a = 9;
6 int b = 10;
7 int c = 11;
8 return 0;
9 }
(gdb)
变量a,b和amp;的值ç
(gdb) info locals
a = 9
b = 10
c = 11
(gdb)
变量a,b&amp;的存储器地址ç
(gdb) print &a
$1 = (int *) 0x22ff4c
(gdb) print &b
$2 = (int *) 0x22ff48
(gdb) print &c
$3 = (int *) 0x22ff44
(gdb)
检查变量a,b和amp;的十六进制内存地址值。 ç
(gdb) x 0x22ff4c
0x22ff4c: 0x09
(gdb)
(gdb) x 0x22ff48
0x22ff48: 0x0a
(gdb)
(gdb) x 0x22ff44
0x22ff44: 0x0b
(gdb)
检查变量a,b和amp;的十进制内存地址值。 ç
(gdb) x/d 0x22ff4c
0x22ff4c: 9
(gdb) x/d 0x22ff48
0x22ff48: 10
(gdb) x/d0x22ff44
0x22ff44: 11
(gdb)
问题是;是否可以在Hex&amp ;;中打印存储器地址值。单个命令中的小数?
如果我可以像这样生成输出,那将非常有用。
Address Variable Dec Hex
0x22ff4c a 9 0x09
0x22ff48 b 10 0x0a
0x22ff44 c 11 0x0b
答案 0 :(得分:2)
除了ks1322的用户定义命令外,gdb python API 这会添加一个GDB命令来打印出各种格式的表格 为vars添加多个参数以打印出你想要的表格应该不会太难。
class Foo (gdb.Command):
"""dereference and print in various formats"""
def __init__ (self):
super (Foo, self).__init__ ("foo", gdb.COMMAND_USER, gdb.COMPLETE_SYMBOL)
def invoke (self, arg, from_tty):
ptr = gdb.parse_and_eval("&" + str(arg));
val = ptr.referenced_value();
print('0x%x 0x%x %d' % (ptr, val, val));
Foo ()
简短的成绩单
(gdb) source foo.py
(gdb) foo a
0x7fffffffdebc 0x9 9
(gdb) foo b
0x7fffffffdeb8 0xa 10
(gdb) foo c
0x7fffffffdeb4 0xb 11
答案 1 :(得分:1)
你可以为此定义一个user-defined command,虽然你不会得到你想要的输出格式:
define my_x
x $arg0
x/d $arg0
end