我使用的是ubuntu 10.1,g ++编译器.
我试图将gcov和lcov用于我的C++项目.我设法编译gcov:
g++ -fprofile-arcs -ftest-coverage main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)
没有错误或警告消息.接下来我尝试运行gcov:
gcov main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)
还好.我也尝试运行我的程序:
./a.out
Run Code Online (Sandbox Code Playgroud)
并再次运行gcov,我的主要用户和game.cpp现在显示一些百分比.我想捕获数据,我在终端输入:
lcov --directory /home/projects/Game1/ -c -o application.info
Run Code Online (Sandbox Code Playgroud)
但它给了我这个:
Capturing coverage data from /home/projects/Game1/
geninfo: ERROR: cannot read /home/projects/Game1/!
Run Code Online (Sandbox Code Playgroud)
我在网上搜索,阅读lcov文档,我找不到答案.有人可以帮帮我吗?
另外,我也无法打开main.gcda文件.(我尝试使用文本编辑器打开,它说一些字符编码问题,非常多:UTF-8,Western(ISO-8859-1),Western(ISO-8859) -11)等,但仍然无法打开并读取文件.
请帮帮我..谁?
编辑:
我承认,这是我的错误(我非常抱歉,"home/Projects/Game1",资本为"P".)在验证路径后,我收到了这个新错误:
geninfo: ERROR: /home/Projects/Game1/main.gcno: reached unexpected end of file
Run Code Online (Sandbox Code Playgroud) 我使用lcov和shell脚本并不是太强大,所以这对我来说是一个学习过程.我理解编写代码覆盖率报告的基础知识,但我不知道排除某些目录的代码行.在shell可执行文件中,我编写了以下代码:
#!/bin/sh
ROOT_DIR=$1
DEST_DIR=$2
TARGET_DIR=$3
TARGET=$4
#init lcov
lcov -c -i -d $TARGET_DIR/.. -o $TARGET_DIR/cov_init.info
#run unit test executable
"$DEST_DIR/$TARGET"
#capture coverage after running executable
lcov -c -d $TARGET_DIR/.. -o $TARGET_DIR/cov_test.info
#I added this in-generate delta of coverage
lcov -a $TARGET_DIR/cov_init.info -a $TARGET_DIR/cov_test.info -o $TARGET_DIR/cov.info
# I added this in- Excludes some third party code
lcov --remove $TARGET_DIR/cov.info '/opt/*' '/usr/*' '$ROOT_DIR/Common?ExternalLibraries/*'
#I added this in-generate report
genhtml $TARGET_DIR/cov.info --ignore-errors source --output-directory $DEST_DIR/CoverageReport/$TARGET
xdg-open $DEST_DIR/CoverageReport/$TARGET/index.html &
Run Code Online (Sandbox Code Playgroud)
我很确定在运行可执行文件后捕获coverage之前我需要排除目录.
我想从我的覆盖率报告中排除外部库的代码,所以我在 lcov 命令中添加了 --no-external 标志。不幸的是,添加此标志后 genhtml 无法生成覆盖率报告。
使用的命令:
lcov --directory 。-c -o coverage.info -t "coverage_result" --no-external
结果:
genhtml: 错误: 在跟踪文件coverage.info 中找不到有效记录
此外,coverage.info 文件看起来已损坏:
TN:coverage_result
TN:coverage_result
TN:coverage_result
TN:coverage_result
有没有人有类似的问题?
我正在 Linux 机器内使用 VS 代码开发 dotnet core 项目。
按照以下博客生成覆盖率报告: https://www.hanselman.com/blog/AutomaticUnitTestingInNETCorePlusCodeCoverageInVisualStudioCode.aspx
正如那里提到的,我传递了 dotnet 测试参数,如下所示:
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=./lcov.info
Run Code Online (Sandbox Code Playgroud)
并期望生成 lcov.info 文件,但它没有。
我在这里错过了什么吗?
ps:我已经包含这个包了
<PackageReference Include="coverlet.collector" Version="1.3.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的基于CMake的项目(包含几个目标)上获得代码覆盖率.
首先,我生成gcno文件:
lcov -b . -d . -o coverage.output --capture --initial
Run Code Online (Sandbox Code Playgroud)
在*.gcno在产生
build_dir/[target_dir]/CMakeFiles/[target_dir].dir
Run Code Online (Sandbox Code Playgroud)
然后我运行我的测试,生成*.gcna文件
build_dir/tests/CMakeFiles/[target_dir].dir
Run Code Online (Sandbox Code Playgroud)
当我现在再次运行lcov时:
lcov -b . -d . -o coverage.output --capture
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Scanning . for .gcda files ...
Found 23 data files in .
Processing Base.dir/DateTools.cpp.gcda
geninfo: ERROR: build_gcov/tests/CMakeFiles/Base.dir/DateTools.cpp.gcno: could not open file
Run Code Online (Sandbox Code Playgroud)
当我手动移动*.gcno文件到该目录*.gcda产生它似乎工作.
谢谢你的帮助!!!
我使用gcov进行代码覆盖分析,使用lcov生成覆盖的图形输出.这适用于已执行目标文件的至少一部分的代码文件.我希望能够跟踪尚未执行的文件.我怀疑这与不为这些文件生成的.gcda文件有关.有没有办法强制生成所有目标文件的.gcda文件,而不管执行情况如何?
我正在使用类似于以下结构的C++项目:
--- /src
|--comms
|--utils
|--interfaces
…
CMakeList.txt
--- /test
|---test1/
|--main.cpp
|--CMakelists.txt
--CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
我确实需要控制测试的覆盖范围,为此我用这种方式使用GCOV和LCOV:
在所有CMakeLists.txt中启用coverage标志,以生成.gcno文件.
SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -fprofile-arcs -ftest-coverage")
SET(CMAKE_C_FLAGS "-g -O0 -Wall -W -fprofile-arcs -ftest-coverage")
SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")
Run Code Online (Sandbox Code Playgroud)运行测试,生成相应的.gcda文件.
此时,文件gcno和gcda与相应的.o文件位于同一目录中.我无法移动这些文件,因为如果我这样做,报告覆盖率生成就不起作用了.
从该文件的目录.gcno和.gcda位于我做到以下几点:
lcov –c –d . –o name.info
Run Code Online (Sandbox Code Playgroud)使用以下方法生成HTML报告:
genhtml name.info.
Run Code Online (Sandbox Code Playgroud)当我编译项目时,我有重复的.gcno文件,因为在编译测试时,他们需要重新编译它们的依赖项(comms,utils,...),因为我没有为这些依赖项生成库.如果我不使用库,我认为没有办法避免这种情况.
但是,当我尝试index.html为全局项目生成(覆盖率报告)时,它不起作用.
我用我的创建项目相同的文件夹结构,并复制每一个shell脚本.gcno,并.gcda到相应的目录中.我执行命令lcov和genhtml,尽管如此,index.html 不包括所有项目的覆盖范围.
我将不胜感激任何帮助.
今天我将我的矩阵类重写为constexpr. 我对这个类有 100% 的单元测试覆盖率,但我注意到在将几乎所有函数转换为 constexpr 后,构造函数的一部分在 lcov 中被标记为根本不再被覆盖。
这是只有构造函数的类。
template<typename T, std::size_t m, std::size_t n>
class Matrix
{
static_assert(std::is_arithmetic<T>::value,
"Matrix can only be declared with a type where "
"std::is_arithmetic is true.");
public:
constexpr Matrix(
std::initializer_list<std::initializer_list<T>> matrix_data)
{
if (matrix_data.size() != m)
{
throw std::invalid_argument("Invalid amount of rows.");
}
for (const auto& col : matrix_data)
{
if (col.size() != n)
{
throw std::invalid_argument("Invalid amount of columns.");
}
}
std::size_t pos_i = 0;
std::size_t pos_j = 0;
for (auto …Run Code Online (Sandbox Code Playgroud) 我已经尝试了几个小时,以便为我的新vue(基于打字稿的)项目(由vue-cli v3生成)启动并运行伊斯坦布尔代码覆盖率报告。
每当我运行测试时:(nodemon --exec nyc vue-cli-service test:unit)仅包含.ts文件,即使我已明确设置nyc应包括这些文件:
"nyc": {
"check-coverage": true,
"per-file": true,
"lines": 80,
"instrument": true,
"sourceMap": true,
"statements": 80,
"functions": 80,
"branches": 80,
"include": [
"apollo-server/**/*.{ts,vue}",
"apollo-server/*.vue",
"src/**/*.{ts,vue}",
"src/*.vue"
],
"exclude": [
],
"reporter": [
"lcov",
"text",
"text-summary"
],
"extension": [
".ts",
".vue"
],
"cache": true,
"all": true
}
Run Code Online (Sandbox Code Playgroud)
我也曾尝试设置nyc.instrument与nyc.sourceMap假以允许像这样的WebPack配置自定义加载器:
module.exports = {
baseUrl: process.env.NODE_ENV === 'production'
? '/'
: '/',
configureWebpack: config => {
// if (process.env.NODE_ENV === "coverage") …Run Code Online (Sandbox Code Playgroud)