c++ - 从源代码项目中提取所有功能的工具

标签 c++ c parsing

我正在尝试构建一个可用工具列表,用于解析完整的源代码包并将所有函数/方法提取为单独的部分。我的目标是运行一个工具或脚本,立即知道包中有多少函数,并根据需要轻松地逐个检查完整的分段函数集。

现在我正在使用 NiCad 克隆检测工具,其中包括一个用 TXL(一种树转换语言)编写的提取脚本。每个函数都被提取出来并作为一个唯一的实体存储在 XML 文档中,因此处理函数列表非常方便。 NiCad 包括用于 C、Java 和 Python 的提取工具。我最关心的是 C,但也很高兴有其他可用的东西。我们还没有设置 C++ 解析器 - 这会很方便。

我还使用了 Doxygen,它具有识别调用图的额外好处。虽然这些文件中有很多标记,因此解析 Doxygen 的输出以将它们放入一个简单的函数列表中需要一些额外的工作。

有没有人用过提取全套函数/方法的工具?你有什么建议或警告吗?如果是您自己编写的,是否可以在某处获取?

谢谢!

最佳答案

可以使用linux的nm工具。 “nm 用于列出目标文件中的符号”。请参阅 nm 的手册页以获取更多详细信息;示例 nm 复制在这里供您引用。

void fun1() {
    return;
}

void fun() {
     fun1();
}
int main()
{
     fun();
     return 0;
}

Nm 以上程序运行"nm a.out | grep T"

08048470 T __libc_csu_fini
08048400 T __libc_csu_init
080484ac T _fini
080482b8 T _init
08048320 T _start
080483d9 T fun
080483d4 T fun1
080483e3 T main

关于c++ - 从源代码项目中提取所有功能的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11567112/

相关文章:

java - 用于 Java 的小型、简约和快速的 XML 库?

c# - 如何覆盖视频的 i 帧?

c++ - 与裸 __m128 相比,SSE vector 包装器类型的性能

c++ - 这个 C++ 模板中的迭代器类型应该是什么?

C++ 按位异或 ^ 不起作用

c - C 指针有问题

java - 从 SAXparser 类解析字符串时出现 Long.parseLong 错误 (Java)

c++ - rpm -q -> 只查询描述

c - 奇怪的 posix 消息队列链接问题 - 有时链接不正确

python - beautifulsoup 解析时出现问题