转储c-struct类似于gcc但是作为可调用的c函数

时间:2014-04-03 23:44:21

标签: c gdb metadata introspection

我有很多c-structs(包含包含含有子结构的联合的子结构...))并且想要像gcc那样以类似的方式打印它们。

所以我不想做How do I dump an arbitrary struct in C?中描述的事情,因为这只是一个hexdump

而且我也不想发明某种内省(java /现代c ++之类),但只想使用gcc为gdb生成/生成的知识,并添加一些知识(比如如何选择正确的变体)工会)

Linux C: Easy & 'pretty' dump/printout of structs (like in gdb) - from source code?中提出的那样。

所以我的计划是:拿出我所拥有的所有漂亮的c代码,让gcc对它进行处理并生成一些元信息,然后在第二轮中通过某些东西进行解析/分析,然后能够解释/打印根据那些信息记忆。

在Linux中有一个名为pstruct / c2ph的实用程序,它做了类似的事情,并且似乎在某种程度上可以修改以实现我想要的知识......

所以,基本上我正在寻找一个包含

文件的工具
struct X {
   int a;
   char *b;
 }

并生成一个函数lile printX(void * p);然后打印出类似的东西 {a:1,b:" lala"},如果p指向相应的X

那么有什么东西可以做到吗?我觉得pstruct非常接近......

1 个答案:

答案 0 :(得分:1)

最好和最精确的方法是依赖编译器插件接口,就像clang和gcc提供的那样。基本上,编译器将在每个有趣的事件(例如遇到声明)上调用插件提供的回调,使您有机会生成必要的包装器/元数据。

替代方法包括像gcc-xml这样的工具(它将生成程序的xml表示),swig以及能够解析DWARF调试输出的任何工具(gdb使用的是什么)。