如何配置cppcheck来检测linux源代码中的内存泄漏
How to configure cppcheck to detect memory leaks in linux souce code
我想尝试一些开源静态分析工具来检查它们在检测linux源代码泄漏方面的性能。我从cppchecker开始。在linux中,大多数内存分配调用都是通过kmalloc()、kzalloc()等函数进行的,相应的自由函数是kfree()。如何配置cppchecker来跟踪kmalloc调用,而不是默认的malloc()调用?有一种东西叫做创建一个新的配置文件,我们可以在其中定义用户偏好,但我不知道如何做到这一点。
作为上述问题的后续,cppcheck是否执行内存泄漏检测的过程间分析?我还可以使用哪些开源静态分析工具来实现此目的?
我是一名Cppcheck开发人员。
的确,kmalloc等有旧的内置处理。一个好的开始是用内置知识检查内核。不需要cfg文件。
但是,使用cfg文件可以增强cppcheck。
这是一个开始:
<?xml version="1.0"?>
<def format="1">
<memory>
<dealloc>kfree</dealloc>
<alloc init="false">kmalloc</alloc>
<alloc init="true">kzalloc</alloc>
</memory>
</def>
将该文本保存在一个名为kernel.cfg的文件中,然后使用--library=kernel在cppcheck分析期间使用该信息。
这个cfg中有很多缺失的信息。如果使用--check cfg,当Cppcheck在分析过程中感到困惑并想要更多的cfg信息时,它会抱怨。它主要需要返回有关函数的信息,以及函数是否为"泄漏忽略"。
您可以查看我们的官方std.cfg文件,例如strcmp()的配置。此配置明确表示strcmp()不是noreturn。该配置还有一个"leak-ignore"属性,因为如果你可以将一个指向已分配内存的指针传递给strcmp(),那么泄漏检查器应该忽略这个属性,因为strcm()不会导致任何释放等。
如果您对它的工作原理有疑问,请告诉我们。
您确定cppcheck还不能检查内核分配泄漏吗?源代码看起来非常像对待kmalloc等等就像对待malloc一样。例如,查看cppcheck存储库中的testmemleak.cpp文件,您会看到执行错误kmalloc的测试用例。
就过程间分析而言,我不相信cppcheck能做到这一点。我推测GCC可能能够基于-flto标志做一些事情,但我不是专家。
- 在Linux中哪里可以找到互斥、未来等的源代码
- Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
- 在Linux Mint 19下,从哪里提取wxWidgets的源代码(.cpp文件)用于步骤内部调试
- 除了 Linux 上的源代码和编译 (GCC) 之外,有没有办法在 Windows 中托管 IDE
- CPP-将源代码从Windows转换为Linux
- 为不同平台上的Linux上编译C/C 源代码
- 在 Ubuntu Linux 中查找 C/C++ 源代码的最佳工具是什么?
- Linux服务器和Windows客户端上的C 源代码
- 如何在Linux中编译DEC UNIXv4.0应用程序源代码
- ' /usr/lib/i386-linux-gnu/qt5/bin/lrelease: 未找到 警告:目标为空' 尝试从源代码编译 Feathercoin 时出错
- 创建像Linux "df"这样的实用程序,基于此实用程序的源代码
- 如何在Linux上从源代码安装TBB并使其工作
- 如何在 Linux 中从源代码安装 libavcodec 和 libavutil
- 如何配置cppcheck来检测linux源代码中的内存泄漏
- 用于Linux C++的开放源代码库,用于将word文档转换为纯文本
- 在Linux中使用Netbeans调试具有GUI前端的C++源代码
- 编译一个在所有Linux发行版中执行而不重新编译的C/ c++源代码是否可能?
- 如何将Linux c++源代码转换为Windows c++源代码
- 用于linux的gethostbyname函数的独立源代码
- 在Linux机器上从源代码构建Qt-4.3.2