如何在C中自动打印结构值(如gdb ptype)?

这个问题在我脑海里呆了很长时间。 我们知道,我们在调试时可以很容易地在GDB中打印数据结构,就像gdb ptype命令一样,它可以输出结构的所有字段值。 我知道GDB使用bfd库来读取目标文件中的符号信息。 我的问题是:如果我想在我的C源代码中执行此操作,该怎么办? 因为我不想逐个打印每个结构的字段。 是否有任何存在的库来解决这个问题? 我认为该库不仅符合我的要求,在编写C / C ++代码时对许多其他程序员来说非常有用。

就C而言,这样的库不可能存在。

你可以做的是编写一种编译器类工具,它采用某种语言的struct描述,并生成一个带有C语言struct声明的头文件,以及一个带有打印代码的源文件。 这样的工具确实存在(例如protobuf-c),但它们主要面向有效的二进制序列化,而不是人类可读的C数据表示。

我不认为有为C广泛使用的这种工具。 但是,您可以尝试编写一个函数来承担负担并在需要时调用它。 我知道一个函数不能打印各种类型的结构,你必须为每种类型的结构构建每个结构,但它仍然是一个更好的想法,而不是坚持旧的规则,每次写。