我在GDB(调试器)会话中遇到了一个结构体(名为ngx_http_variable_value_t),我想在控制台中打印它的字段。这可能吗?
ngx_http_variable_value_t
piok6c0g1#
您可以使用GDB命令ptype打印出结构体或类的定义。此外,使用ptype /o可以打印结构体中所有字段的偏移量和大小(如pahole)。
ptype
ptype /o
dfty9e192#
如果您有内置的调试符号,您应该只能够打印值:print variable或print *variable(如果它是指向结构的指针)。
print variable
print *variable
6g8kf2rb3#
一月一日
此选项还为p *my_struct_pointer提供换行符和缩进。你喜欢哪一种:
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" }, }
kd3sttzy4#
除了使用命令行选项之外,您还可以使用图形调试器,我建议使用gdbgui,但是有很多这样的调试器。
免责声明:我是gdbgui的开发者
vcirk6k65#
p *((struct my_struct*) variable)
这将帮助您在gdb中打印struct的详细信息
pu82cl6c6#
我只通过gdb的图形前端做过这个。在gdb在线文档中找到了这个条目。希望它能有所帮助。我相信这将要求代码是在包含调试信息的情况下创建的。ptype [arg] ptype接受与whatis相同的参数,但是打印类型的详细描述,而不仅仅是类型的名称。使用GDB调试:符号
xpszyzbs7#
我想看看Data Display Debugger。
yyhrrdl88#
假设yout变量位于地址X中。您可以执行以下操作:
set $i1 = (ngx_http_variable_value_t *) = X print *$i1 print *$i1->name_field
下面是一个例子,假设这是我的结构体,并且在地址0x804a008中定义了一个strcut internet类型的变量:
struct internet { int priority; char *name; }; (gdb) set $i1 = (struct internet *)0x804a008 (gdb) print *$i1 $17 = {priority = 1, name = 0x804a018 "AAAABBBBCCCCDDDDEEEEt\227\004\b"} (gdb) print $i1->name $18 = 0x804a018 "AAAABBBBCCCCDDDDEEEEt\227\004\b" (gdb) print $i1->priority $19 = 1 (gdb)
idfiyjo89#
将NULL转换为类型指针,然后使用ptype。
(gdb) ptype *(struct iovec*)0 type = struct iovec { void *iov_base; size_t iov_len; }
或者只是
ptype {struct iovec}0
9条答案
按热度按时间piok6c0g1#
您可以使用GDB命令
ptype
打印出结构体或类的定义。此外,使用
ptype /o
可以打印结构体中所有字段的偏移量和大小(如pahole)。dfty9e192#
如果您有内置的调试符号,您应该只能够打印值:
print variable
或print *variable
(如果它是指向结构的指针)。6g8kf2rb3#
一月一日
此选项还为
p *my_struct_pointer
提供换行符和缩进。你喜欢哪一种:
或:
kd3sttzy4#
除了使用命令行选项之外,您还可以使用图形调试器,我建议使用gdbgui,但是有很多这样的调试器。
免责声明:我是gdbgui的开发者
vcirk6k65#
这将帮助您在gdb中打印struct的详细信息
pu82cl6c6#
我只通过gdb的图形前端做过这个。在gdb在线文档中找到了这个条目。希望它能有所帮助。我相信这将要求代码是在包含调试信息的情况下创建的。
ptype [arg] ptype接受与whatis相同的参数,但是打印类型的详细描述,而不仅仅是类型的名称。
使用GDB调试:符号
xpszyzbs7#
我想看看Data Display Debugger。
yyhrrdl88#
假设yout变量位于地址X中。您可以执行以下操作:
下面是一个例子,假设这是我的结构体,并且在地址0x804a008中定义了一个strcut internet类型的变量:
idfiyjo89#
将NULL转换为类型指针,然后使用ptype。
或者只是