我正在研究Juliet Test Suite,我正在对这些代码应用一些静态分析器来生成警告。运行cppcheck
后,我发现它无法检测到manifest.xml
文件(元数据)中提到的许多错误。我是否未能正常运行此软件或cppcheck无法检测到这些警告/错误?你以前面对过他们吗?
到目前为止,我在Juliet Test Suite上使用cppchecker。我将在上面使用Clang,Veracode和Flawfinder,因为我第一次尝试失败了。
这是我使用的命令。
cppcheck --enable=all -q --xml -I testcasesupport/ testcases/ 2>out.xml
在给定的元数据manifest.xml
文件中,一些示例错误是 -
<?xml version="1.0" encoding="utf-8"?>
<container>
<testcase>
<file path="CWE127_Buffer_Underread__CWE839_connect_socket_01.c">
<flaw line="111" name="CWE-127: Buffer Under-read"/>
</file>
</testcase>
<testcase>
<file path="CWE114_Process_Control__w32_char_connect_socket_03.c">
<flaw line="124" name="CWE-114: Process Control"/>
</file>
</testcase>
.
.
.
</container>
但是我由cppchecker生成的output.xml
文件没有大多数这些错误。output.xml
文件中的大多数错误属于"CWE-398"错误,这是一个样式错误。但是 cppcheck 可以检测常见错误,例如"数组越界"或类似错误。
是不是cppcheck没有涵盖Juliet Test Suite的这些不常见错误?如果是,其他静态分析器可以正确检测它们吗?
我是 Cppcheck 开发人员。
我是否未能正常运行此软件或cppcheck无法检测到这些警告/错误?你以前面对过他们吗?
要了解 CWE Cppcheck 可以检测到的内容,您可以使用以下命令:
./cppcheck --errorlist
在输出中查找"cwe"。
是不是cppcheck没有涵盖Juliet Test Suite的这些不常见错误?如果是,其他静态分析器可以正确检测它们吗?
我不记得朱丽叶测试套件涵盖哪些 CWE,但 Cppcheck 并未涵盖所有 CWE。而且我认为没有任何工具可以涵盖所有CWE。
CPPCoect相当简单,远非完美。
我同意。我相信KISS原则。Cppcheck远非完美。
但是,除了cppcheck之外,还可以尝试叮当声和各种消毒剂(asan,tsan,ubsan等)。
我同意。最佳做法是使用多种工具。即使您使用最昂贵的工具,这也是最佳实践(例如,NASA使用各种昂贵的工具以及Cppcheck,因为Cppcheck检测到一些未检测到的问题,反之亦然)。
我正在研究朱丽叶测试套件
在我看来,朱丽叶测试套件制作精良。代码很奇怪且不切实际。您的结论仅具有学术意义。在实际代码上运行该工具。
我建议你扫描一些重要的开源项目。Cppcheck 可以在 Debian 中找到成百上千的错误(未定义的行为),该软件安装在数百万台计算机上。最新的稳定 Linux 的状态不是那么好。:-(
cpipcheck 相当简单,远非完美。它有时可以检测到一些问题。但并非所有问题都存在。这或多或少适用于任何工具。但是,除了cppcheck之外,还可以尝试叮当声和各种消毒剂(asan,tsan,ubsan等)。
叮叮当当整洁非常好且免费(请参阅检查列表)。
Coverity是我用过的最好的,但它相当昂贵。
对于运行时检查,地址清理器,线程清理器和未定义行为清理器都很棒。
当然,始终从编译器启用尽可能多的警告,并在启用和不使用优化的情况下进行构建以捕获不同的错误。