我有一个这样的结构:
struct Foo {
char *name,
int priority
};
我有一个gdb函数来打印结构的内容:
define p_Foo
printf "Foo(%lx:\n", $arg0
set $f = (struct Foo*)$arg0
printf "name = %s\n", $f.name
printf "priority = $d\n", $f.priority
end
问题是,如果未填充名称字段,则上述函数将停止运行,而不打印优先级字段:
(gdb) p_Foo 0x56000b8bb888
Foo(56000b8bb888):
name =Cannot access memory at address 0x400000002
你可以看到优先级没有打印出来。在这种情况下,我需要发出另一个命令来查看这两个字段:
(gdb)p *$f
$5 = {
name = 0x400000002 <Address 0x400000002 out of bounds>,
priority = 170139020,
}
我的问题是,我应该如何编写GDB函数p_Foo,以便它可以打印所有字段,即使其中一些字段是野生指针。
谢谢