GDB:打印/转储到文件时自动展平结构

Posted

技术标签:

【中文标题】GDB:打印/转储到文件时自动展平结构【英文标题】:GDB: automatically flatten structures when printing / dumping to file 【发布时间】:2012-11-17 20:12:27 【问题描述】:

我有一个复杂的 C 结构,其中包含许多指向更复杂结构的指针。

在使用 GDB 进行调试时,我希望能够将结构展平到屏幕/文件中。

确实,我可以写一个很长的漂亮的打印机函数,但是由于所有的指针都是已知类型的(没有空指针),而且 GDB 已经知道如何手动调用 p *x 来做到这一点,可以用它来实现吗?这个?

通常 GDB 会打印结构的第一层而不递归地进入其他层。

【问题讨论】:

【参考方案1】:

通常 GDB 会打印结构的第一层而不递归地进入其他层。

如果 GDB 不这样做,当你尝试打印循环链表时会发生什么?

一般来说,在你的程序中编写一个漂亮的打印函数是一个好主意:总有一天你会有一个非调试可执行文件,你的结构的“根”在一个寄存器中,你会需要检查结构。

但如果您不想这样做,可以在Python 中轻松编写通用的“遵循所有指针”漂亮的打印机。请注意不要在有循环的图表上调用这样的打印机。

【讨论】:

以上是关于GDB:打印/转储到文件时自动展平结构的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上使用核心转储和 gdb 如何使用近似虚拟内存 (VSZ)?

GDB:将参数转储到特定函数的所有调用

核心转储文件分析[重复]

从核心转储中获取堆栈跟踪

在GDB中如何从文件中填充内存

核心转储注释部分