我将 gcov 与 cmake 一起使用。所有标志均已正确设置。.GCNO 文件已正确创建。然而,当执行从源文件生成的可执行文件时,情况有点复杂。可执行文件在 bash 脚本内运行。
让我创建一个示例场景,以便您可以给我准确的答案。
我有一个名为 MY_FILE.CC 的文件,其可执行文件名称为 EXECUTABLE_FILE 我使用 cmake 并为 gcov 设置了所有标志。我有一个名为 THE_SCRIPT.SH 的脚本,它将通过“make test”运行。该脚本运行 EXECUTABLE_FILE 文件。
因此,这里的想法是 bash 脚本 (THE_SCRIPT.SH) 依次运行可执行文件 (EXECUTABLE_FILE),并且运行这些 bash 脚本不会创建 .GCDA 文件。当我直接/手动运行可执行文件时,会创建 .GCDA 文件。我相信 bash 脚本是在子 shell 内运行的,父 shell 无法知道源的可执行文件是否已运行。有人可以确认这是否确实是这种情况吗?如果不是,那么具体的问题是什么?如果是的话,那么这个问题的解决方案是什么?
多谢。
在使用 gcov 获取覆盖信息时,我在编译和链接期间收到以下错误
error: undefined reference to '__gcov_merge_add'
error: undefined reference to '__gcov_init'
Run Code Online (Sandbox Code Playgroud)
我将标志传递给 CMakeLists.txt,如下所示:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
Run Code Online (Sandbox Code Playgroud)
我还需要在 CMakeLists.txt 中添加其他内容吗?
我一直在尝试让 Jenkinsfile 工作。它一直在sh步骤上失败并给出以下错误
process apparently never started in /home/jenkins/workspace
...
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
Run Code Online (Sandbox Code Playgroud)
我尝试过添加
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin'])
Run Code Online (Sandbox Code Playgroud)
在 groovy 文件中的 sh 步之前
还尝试添加
/bin/sh
Run Code Online (Sandbox Code Playgroud)
在Manage Jenkins -> Configure Systemshell 部分
我还尝试用以下内容替换 Jenkinsfile 中的 sh 行:
sh "docker ps;"
sh "echo 'hello';"
sh ./build.sh;"
sh ```
#!/bin/sh
echo hello
```
Run Code Online (Sandbox Code Playgroud)
这是 Jenkinsfile 中我所坚持的部分
node {
stage('Build') {
echo 'this works'
sh 'echo "this does not work"'
}
}
Run Code Online (Sandbox Code Playgroud)
预期输出是“这不起作用”,但它只是挂起并返回上面的错误。
我缺少什么?