【问题标题】:ubuntu command to get all function in a C++ program [closed]ubuntu命令获取C++程序中的所有功能[关闭]
【发布时间】:2012-11-10 23:49:18
【问题描述】:

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

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

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

【问题讨论】:

  • 这篇文章绝对是离题的。这是一个非常好的,绝对与编程相关的问题。恕我直言...

标签: c++ linux ubuntu


【解决方案1】:

您还可以查看以下工具:

【讨论】:

    【解决方案2】:

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

    find -name "*.h" -exec grep -H '^[^/]*(' {} \;
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        ctags 可能是你想要的。 http://ctags.sourceforge.net/

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

        【讨论】:

          【解决方案5】:

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-05
            • 1970-01-01
            • 2016-08-03
            • 2011-04-23
            • 2022-01-16
            相关资源
            最近更新 更多