如何使用 cov-build 工具构建 Juliet 测试套件以通过 GitHub 进行分析

问题描述

我是一名研究生,研究静态分析工具和误报。这项工作的一部分涉及检查 Coverity 的结果,该结果可通过 GitHub 获得。到目前为止,我一直无法使用 cov-build 工具来编译我正在使用的代码,我很难过。我正在使用来自 NIST 的 Juliet 测试套件,可在 https://samate.nist.gov/SRD/testsuites/juliet/Juliet_Test_Suite_v1.3_for_C_Cpp.zip 处获得。它带有一个 compile_all.bat 文件,可将所有测试用例编译为 Windows 上的一个整体可执行文件。

更具体地说,这是通过 Visual Studio 2019 的开发人员命令提示符完成的。当只使用 compile_all.bat 文件时,没有问题,并且生成所有库文件和可执行文件。当我使用命令 cov-build --dir cov-int compile_all.bat 时,C/C++ 文件被编译为目标文件,但 cov-build 工具挂起并阻止创建库文件和可执行文件。我一直无法确定问题可能是什么,但我看到其他存储库已经设法完成了这件事,所以我知道这一定是可能的。任何想法可能是什么问题?我的 build-log.txt 文件太大,无法在此处发布,但我可以应要求提供,感谢您的帮助!

更多细节: Juliet 测试套件的基本目录结构如下。从 compile_all.bat 文件中,for 循环为每个 Common Weakness Enumeration (CWE) 子目录调用批处理文件。该文件编译目录中的文件以及“testcasesupport”目录中的文件,然后链接它们。

整个过程从 CWE114 子目录开始,该目录中的所有文件都可以正常编译,但是当支持文件的编译和链接开始时,cov-build 工具不允许该过程继续进行,只是挂在那里。那时甚至没有任何内容写入 build-log.txt 文件,最后一个日志条目只是详细说明了 CWE114 子目录中最后一个文件的成功编译。 compile_all.bat 文件和 CWE114.bat 文件的内容也在下面。

重申一下,问题不在于批处理文件,因为当我运行 compile_all.bat 文件时一切正常。只有当 cov-build 工具参与该过程时,挂起才会起作用。只是想在这里提供一些背景信息,以便你们这些好人可以帮助我解决我的问题,谢谢!

C  
|  
+-- testcases  
|  |  
|  +-- CWE114  
|     |  
|     +-- testcase1.c  
|     +-- testcase2.cpp  
|     +-- CWE114.bat  
|  
+--testcasesupport  
|  |  
|  +-- io.c  
|  +-- std_thread.c  
|  
+-- compile_all.bat

compile_all.bat 的内容:

rem NOTE: this batch file is to be run in a Visual Studio command prompt

rem Delete old files
del *.obj
del *.ilk
del *.exe

rem Compile test cases individually
set root=%cd%
FOR /F "tokens=* USEBACKQ" %%F IN (`dir testcases\*.bat /b/s`) DO ( 
  cd %%~dpF
  %%F
  lib /out:%root%\%%~nF.lib CWE*.obj
  cd %root% 
)

rem Compile support files
cl /I"testcasesupport" /W3 /MT /GS /RTC1 /bigobj /EHsc /nologo /c "testcasesupport\main.cpp" "testcasesupport\io.c" "testcasesupport\std_thread.c"

rem Link all test cases together 
cl /FeTestcases *.obj CWE*.lib /I"testcasesupport" /W3 /MT /GS /RTC1 /bigobj /EHsc /nologo

CWE114.bat 的内容:

rem NOTE: this batch file is to be run in a Visual Studio command prompt

rem Delete old files
del *.obj
del *.ilk
del *.exe
del *.pdb

rem Compile files into .obj files in current directory
cl /I"..\..\testcasesupport" /W3 /MT /GS /RTC1 /bigobj /EHsc /nologo /c main.cpp CWE*.cpp CWE*.c ..\..\testcasesupport\io.c ..\..\testcasesupport\std_thread.c
rem Link all .obj file into a exe
cl /FeCWE114 *.obj /I"..\..\testcasesupport" /W3 /MT /GS /RTC1 /bigobj /EHsc /nologo

解决方法

我正在总结评论中记录的信息,以便人们知道此问题已得到解答:

  1. 除了 cov-build 比预期慢之外,没有任何问题。 (我不知道在这种情况下到底慢了多少,但根据我的经验,通常会慢 2-3 倍。)

  2. cov-build 运行时使用 Process Explorer 是关键的诊断步骤。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...