【发布时间】:2017-10-11 14:30:04
【问题描述】:
mkdir -p /tmp/build &&
cd /tmp/build &&
mkdir -p /tmp/src &&
echo "int main(){return 0;}" > /tmp/src/prog.c &&
gcc --coverage -o prog /tmp/src/prog.c &&
./prog &&
gcovr -v -r .
将输出一个空报告。
Scanning directory . for gcda/gcno files...
Found 2 files (and will process 1)
Processing file: /tmp/build/prog.gcda
Running gcov: 'gcov /tmp/build/prog.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /tmp/build' in '/tmp/build'
Finding source file corresponding to a gcov data file
currdir /tmp/build
gcov_fname #tmp#src#prog.c.gcov
[' -', ' 0', 'Source', '/tmp/src/prog.c\n']
source_fname /tmp/build/prog.gcda
root /tmp/build
fname /tmp/src/prog.c
Parsing coverage data for file /tmp/src/prog.c
Filtering coverage data for file /tmp/src/prog.c
Gathered coveraged data for 0 files
------------------------------------------------------------------------------
GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File Lines Exec Cover Missing
------------------------------------------------------------------------------
------------------------------------------------------------------------------
TOTAL 0 0 --%
------------------------------------------------------------------------------
但是如果我手动运行
gcov /tmp/build/prog.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /tmp/build
我得到正确的结果
File '/tmp/src/prog.c'
Lines executed:100.00% of 1
No branches
No calls
Creating '#tmp#src#prog.c.gcov'
似乎gcovr 没有从其他正确的gcov 输出中提取覆盖范围。仅当源文件位于当前目录之外(与构建目录相同、与输出目录相同、与运行目录相同)并且使用源文件的绝对路径调用 gcc ics 时才会发生这种情况。
我该如何解决这个问题?
编辑
在上游 gcovr 中修复了相对路径,但看起来像绝对路径的错误。
【问题讨论】:
-
您应该直接在问题中解释目录结构,而不是提供所有这些
mkdir。解释 obj 和源文件的放置位置 -
@Vikas 如果有可重现问题的可运行代码,我会更喜欢它。 (至少如果问题是这种“错误或用户错误?”)
标签: code-coverage gcov gcovr