哪个工具可以在C++中显示方法或函数的最大语句

Which tool can show the maximum statements of Method or function in C++?

本文关键字:函数 方法 语句 显示 工具 C++      更新时间:2023-10-16

我们的项目真的很大。在一个模块中,源代码的大小约为620KLOC。所以我想检查目录/模块中哪个函数最大?有什么工具可以支撑它吗?

SourceMonitor只有"每个方法的平均语句数",而不是每个方法的最大语句数。CCCC也不支持。

例如。此函数长度为1。

unsigned short get()
{
    return 1;
}

谢谢。

我能想到的最简单的就是编写脚本

  • 使用ctags获取文件中的函数列表
  • 使用perl/python/awk/grep将源文件拆分为单独的文件,每个函数一个文件
  • 只需计算每个文件的行数,取最大长度。如果您需要更多详细信息,请将每个文件输入一个loc计数器,例如sloccount to
    获取更精细的信息。再次使用grep来获得您的输出对…感兴趣

另一个可能有用的工具:

Lazy C++:Is是一个代码生成器,它将与C++非常相似的文件拆分为头文件和源文件。如果您编写并将代码转换为lzz文件,则生成的代码包括每个函数的行计数器标记。这些数字的差异将显示您的函数有多大

您可以使用我们的SourceMeter工具扫描您的项目,根据您的需要,它提供包含函数/方法的CSV文件,其中包含度量(以及您正在寻找的其他大小度量)和包含模块(例如库、共享对象、可执行文件)。使用电子表格编辑器,您可以很容易地找到每个模块最大的函数/方法。

我认为许多静态分析工具可能无法满足您的需求,因为它们不一定考虑模板实例化、标头包含(包括预编译标头引入的标头)和编译器的代码生成特性。

我过去也遇到过类似的问题,一个大型可执行文件的大小由一个特定的库决定。我了解它的方法只是简单地查看每个.cpp的对象文件的大小。这不会给你完整的故事,因为链接器会优化掉未使用的部分(尽管值得检查的是,你已经设置了选项集-Visual Studio的/OPT:REF)。不过,它可以让你集中搜索。找到两个或三个最大的对象文件,然后查看相应的.cpp文件。然后您有两个选项-编写一个接受objdump(VisualStudio)或nm -C(gcc)输出的脚本,在其中您可以提取模块中每个函数的偏移量,因此您可以将每个函数与前一个函数进行比较,以了解每个函数的大小。

或者最简单的方法就是在cpp文件上使用二进制搜索#ifdef出#includes结束后的所有代码并对其进行编译。这将使您了解includes的开销(如果它本身很大,那么您可以深入到标头includes中,找出贡献最大的部分)。接下来,用#ifdef禁用代码的每一半,并找出哪一半更大。使用这种方法,您可以快速找到对库的大小贡献最大的函数。

在我拥有的库也有同样的问题的情况下,原因是一个非常大的模板函数,每次保存成员变量时都会实例化它。这种情况下的解决方案是使函数具体化,这样所有不需要特定类型行为的代码都只实例化一次,并且模板函数针对特定类型的逻辑位进行本地化。

CppDepend提供此信息,它基于Clang,使用CQLinq,您可以根据需要请求代码。