3

我正在寻找一种工具,它可以帮助我获得 C++ 程序中可用的所有函数以及它们可用的目录(如果是递归调用)。

例如,如果在文件夹 2 所在的文件夹 1 中运行,则 foo.c 具有 int foo()

我想获取 int foo() 目录 folder2/foo.c

4

5 回答 5

3

您还可以查看以下工具:

于 2012-11-11T00:09:21.940 回答
2

这是一个非常粗略的近似值,但可能已经让您更接近您正在寻找的内容,并且它具有非常简单的优点。从代码库的顶级目录中,运行:

find -name "*.h" -exec grep -H '^[^/]*(' {} \;
于 2012-11-11T04:29:36.923 回答
1

万一您安装了带有 CDT 的 Eclipse ( http://www.eclipse.org/cdt/ ),您可以创建一个新项目,导入所有代码并进行 C/C++ 搜索。

于 2012-11-10T23:56:54.877 回答
1

ctags 也许是你想要的。http://ctags.sourceforge.net/

它是 vim 或 emacs 等编辑器创建标签的工具。这些编辑器可以使用标签来查找函数和类的声明和定义。

于 2012-11-11T02:20:58.320 回答
0

我假设当您谈到您的“C++ 程序”时,您可以访问所有 C++ 源文件及其构建,例如它的Makefile等。

如果您可以访问生成的二进制文件,则可以使用nm -C它来获取其中的函数。

然后,您可能会考虑使用一些 GCC 扩展或插件。您可以使用MELT(这是一种扩展 GCC 编译器的领域特定语言)来扩展 GCC。melt-examples/ex02示例的作用非常相似(它只是计数函数,您可以添加几行使其输出当前计数函数的名称和源位置)。

但请注意,由于 GCC 正在优化,程序中函数的概念可能没有你想象的那么明显:GCC​​ 是克隆和内联函数,这意味着生成的程序中的函数集不是程序中的函数集源代码。

在 GCC 编译器中工作的优点是您可以真正获得编译器所看到的功能。例如,文本方法(如ctagsgrep基于答案)不能很好地与预处理技巧配合使用。

于 2012-11-11T07:26:51.373 回答