【发布时间】:2010-12-18 14:59:30
【问题描述】:
我在我的 GDB(调试器)会话中发现了一个结构(称为 ngx_http_variable_value_t),我想在控制台中打印它的字段。
这可能吗?
【问题讨论】:
我在我的 GDB(调试器)会话中发现了一个结构(称为 ngx_http_variable_value_t),我想在控制台中打印它的字段。
这可能吗?
【问题讨论】:
您可以使用 GDB 命令ptype 打印出结构或类的定义。
此外,使用ptype /o 打印结构中所有字段的偏移量和大小(如pahole)。
【讨论】:
(gdb) p &((struct foo *)0)->member。有一些非hacky的东西会很好。
macro define offsetof(t, f) &((t *) 0)->f) 放入~/.gdbinit。然后你可以使用(gdb) p offsetof(struct foo, member)。
如果您有内置调试符号,您应该能够打印值:print variable 或 print *variable,如果它是指向结构的指针。
【讨论】:
print ((MY_STRUCT *)variable),或者获取结构体的特定元素print ((MY_STRUCT *)variable->my_structure_element。
set print pretty on
此选项还为p *my_struct_pointer 提供换行符和缩进。
你更喜欢哪个:
$2 = {path = {mnt = 0xffff8800070ce1a0, dentry = 0xffff880006850600},last = {{{hash = 3537271320, len = 2}, hash_len = 12127205912}, name = 0xffff88000659501c "../b.out"}
或:
$3 = {
path = {
mnt = 0xffff8800070ce1a0,
dentry = 0xffff880006850600
},
last = {
{
{
hash = 3537271320,
len = 2
},
hash_len = 12127205912
},
name = 0xffff88000659501c "../b.out"
},
}
【讨论】:
【讨论】:
p *((struct my_struct*) variable)
这将帮助您在 gdb 中打印结构的详细信息
【讨论】:
我只通过 gdb 的图形前端完成了这项工作。在 gdb 在线文档中找到此条目。希望能帮助到你。我相信这将要求创建包含调试信息的代码。
ptype [arg] ptype 接受与 whatis 相同的参数,但打印类型的详细描述,而不仅仅是类型的名称。
【讨论】:
【讨论】: