如何检测仅使用 cppcheck 从未使用的函数中调用的函数?

Posted

技术标签:

【中文标题】如何检测仅使用 cppcheck 从未使用的函数中调用的函数?【英文标题】:How to detect functions, that are only called from unused functions using cppcheck? 【发布时间】:2015-06-08 14:04:31 【问题描述】:

我正在尝试检测 C++ 中未使用的函数。目前我正在尝试使用 cppcheck,但我不知道它是否可能或如何检测功能,这些功能只被自己不使用的功能使用。

这是我的小测试代码:

int bla() 
    return 0;


int test() 
    return bla();


int main() 
    int a = 0;
    int b = 0;
    return b;

这就是 cppcheck 用我当前的设置检测到的:

$ cppcheck --enable=style,unusedFunction test.cpp 
Checking test.cpp...
[test.cpp:10]: (style) Variable 'a' is assigned a value that is never used.
Checking usage of global functions..
[test.cpp:5]: (style) The function 'test' is never used.

问题在于它没有将函数 bla 检测为未使用,因为它在测试中被调用。但是 test 永远不会被调用,所以 bla 也不会。我希望除 main 使用的函数之外的所有函数都标记为未使用。

您知道用于 cppcheck 的选项,或者甚至可以将 bla 检测为未使用的其他静态代码分析工具吗?

【问题讨论】:

Find never-called functions的可能重复 这里看不出有什么真正的问题,你可以迭代找到所有的函数。删除test,然后再次运行检查。 【参考方案1】:

您可以尝试CppDepend 及其查询语言 CQLinq,您可以使用 CQLinq 创建高级查询来根据需要过滤结果,例如在您的情况下您可以执行此查询:

from m in Methods where m.MethodsCallingMe
.Where(a=>!a.SimpleName.Contains(("test"))).Count()>0
select m

【讨论】:

【参考方案2】:

我使用 callcatcher http://www.skynet.ie/~caolan/Packages/callcatcher.html 找到了我自己的解决方案。这不是静态代码分析,但它的工作方式完全符合我的要求。

【讨论】:

以上是关于如何检测仅使用 cppcheck 从未使用的函数中调用的函数?的主要内容,如果未能解决你的问题,请参考以下文章

c++代码检测工具

cppcheck 未检测到来自 epoll_create 的资源泄漏

cppcheck 检测到资源泄漏 - 误报?

CppCheck 未检测到内存泄漏

JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

由于包含路径,cppcheck 未检测到资源泄漏