gcc生成函数和变量名列表

Wil*_*ogg 4 c gcc

我正在寻找一种方法来获取一组c源文件的所有函数和变量名称的列表.我知道gcc在编译和链接时会破坏这些元素,那么有没有办法捎带这个过程呢?或者任何其他可以做同样事情的工具?

编辑:这主要是因为我很好奇,我一直在玩像自动依赖和图形包括树的东西,并希望能够获得更多的源文件的统计数据.它似乎已经存在但我还没有找到任何选项或标志.

Bas*_*tch 6

如果您只对全局函数和变量的名称感兴趣,则可能(假设您在Linux上)使用ELF二进制可执行文件目标文件上的nmobjdump实用程序.

否则,您可以通过插件自定义GCC编译器(假设您有最新版本,例如至少5.3或6).您可以直接在C++中对它们进行编码,或者您可以考虑使用GCC MELT,一种类似Lisp的域特定语言来自定义GCC.甚至GCC MELT 的findgimple模式也许就够了......

如果您考虑扩展GCC,请注意您需要花费大量时间(可能是几个月)来详细了解其内部表示(尤其是Generic Trees&Gimple).GCC MELT 文档页面上的链接和幻灯片可能很有用.

您的主要问题是您可能需要了解有关GCC内部表示的大部分细节,这需要时间!

此外,GCC内部的细节从一个版本的GCC到下一个版本略有变化.

你也可以考虑(而不是在GCC内部工作)使用Clang/LLVM框架(但学习也是很多时间).也许你也可以看看Frama-CCoccinnelle.

另一种方法可能是使用调试信息进行编译并解析DWARF信息.

PS.我的观点是,你的问题可能比你所认为的要困难得多.解析C并不是那么简单......你可能花费数月甚至数年的时间来研究......而且细节可能是目标处理器,系统和编译器特定的......