如何显示结构体在GDB中的哪些字段?

时间:2009-11-20 06:06:21

标签: c emacs gdb nginx

我在GDB会话中遇到了一个名为ngx_http_variable_value_t的结构体,我想打印它在控制台中的字段。

这可能吗?

7 个答案:

答案 0 :(得分:98)

您可以使用GDB命令ptype打印出结构或类的定义。

答案 1 :(得分:55)

如果你有内置的调试符号,你应该能够打印值:print variableprint *variable如果它是指向结构的指针。

答案 2 :(得分:10)

<强> var count = 3; var results = []; for(let i = 0 ; i < count ; i++){ browser.call(function(){ console.log(`counter is ${i}`); browser.refresh(); element(by.id('h-top-questions')).getText().then(function(text) { results.push(`${i}:${text}`); }); }); } browser.call(function() { console.log("done!", results); });

此选项还为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 :(得分:5)

除了使用命令行选项外,您还可以使用图形调试器。我建议gdbgui,但那里有很多。

screenshot

免责声明:我是gdbgui的开发者

答案 4 :(得分:2)

我只是通过gdb的图形前端完成了这个。在gdb在线文档中找到此条目。希望能帮助到你。我相信这将要求代码是在包含调试信息的情况下创建的。

ptype [arg] ptype接受与whatis相同的参数,但打印类型的详细描述,而不仅仅是类型的名称。

Debugging with GDB:Symbols

答案 5 :(得分:1)

我会看一下Data Display Debugger

答案 6 :(得分:0)

  p *((struct my_struct*) variable)

这将帮助您在gdb中打印struct的详细信息