我正在寻找一种方法来获取一组c源文件的所有函数和变量名称的列表.我知道gcc在编译和链接时会破坏这些元素,那么有没有办法捎带这个过程呢?或者任何其他可以做同样事情的工具?
编辑:这主要是因为我很好奇,我一直在玩像自动依赖和图形包括树的东西,并希望能够获得更多的源文件的统计数据.它似乎已经存在但我还没有找到任何选项或标志.
如果您只对全局函数和变量的名称感兴趣,则可能(假设您在Linux上)使用ELF二进制可执行文件或目标文件上的nm或objdump实用程序.
否则,您可以通过插件自定义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-C或Coccinnelle.
另一种方法可能是使用调试信息进行编译并解析DWARF信息.
PS.我的观点是,你的问题可能比你所认为的要困难得多.解析C并不是那么简单......你可能花费数月甚至数年的时间来研究......而且细节可能是目标处理器,系统和编译器特定的......