获取C符号的类型信息

时间:2011-11-01 12:38:09

标签: c types

让我先尝试一下背景。我正在开发一些带有微控制器(AVR)的项目,我正通过某个接口(UART)访问。我正在直接写入其全局变量,我也能直接执行函数(写args,触发器执行,读回返回值)。

AVR代码在C中用GCC工具链编译。正在与之通信的PC正在运行python代码。截至目前,我已经进口了地址&通过解析'objdump -x'输出,可以轻松地将信息大小写入python。现在,将大大促进我的开发的是有关符号类型的信息(结构元素的类型和大小,枚举值,函数参数和返回值,......)。

不知怎的,这似乎是人们每天都做的常见事情,我天真地期待着现成的python工具。好吧,不那么容易。到现在为止,我花了很多时间研究如何实现这一目标。 一种方法是仅解析C代码(使用例如pycparser)。但似乎我必须至少“预解析”代码以排除各种不受支持的结构和各种排序问题等等。另外,从理论上讲,问题是如果编译器会进行一些优化,比如struct或enum reordering等等。 我一直在研究各种gcc,gdb和objdump选项来获取这些信息。花了一些时间寻找从各种调试格式(矮人,刺伤)中提取信息的工具。 到目前为止,我最接近的是使用objdump -g选项转储stabs调试信息。这会输出类似C的信息,然后我会使用pycparser或我自己解析。

但是在我花时间做这件事之前,我决定在这里提出一个问题,强烈希望有人能用我可能完全不同的方法来打我。

2 个答案:

答案 0 :(得分:0)

有一个非常好用的工具叫c2ph,可以转储类型和大小的可解析描述(使用调试信息作为源代码)

答案 1 :(得分:0)

回答自己......这就是我发现的:

http://code.google.com/p/pydevtools/

实际上我之前已经知道了,但起初它并不适合我。 所以基本上我把Python 3兼容并且做了很少的其他修复/更改 - 在这里你可以得到所有:

http://code.google.com/p/pydevtools/source/checkout

实际上还有一些实际使用这个模块的代码,但还没有完成。我可能会在完成后添加它。