我有以下结构:
Source_code/build/unix/Makefile
Source_code/code/Lib/src/lib1/a.c
gcc编译选项中提到了-fprofile-arcs
和-ftest-coverage
选项。它成功生成了a.gcda
和a.gcno
个文件。当给出以下选项gcov a.c
时,它会正确地为已执行的行提供统计信息。
但它无法正确生成a.c.gcov
文件,只包含/* EOF */
。
它会抛出以下消息:
../../code/lib/src/lib1/a.c:creating 'a.c.gcov'
../../code/lib/src/lib1/a.c:cannot open source file
请让我知道生成a.c.gcov
文件。
答案 0 :(得分:1)
从编译代码的文件夹中运行gcov为我工作。
在.gcov文件的顶部,它指出了完整的文件路径。例:
-: 0:Source:tmp.c
-: 0:Graph:tmp.gcno
-: 0:Data:tmp.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
如果它位于不同的文件夹中,即/path/tmp.c,请执行:
gcov ./path/tmp.c -o ./path/tmp
答案 1 :(得分:0)
在无法找到源文件的情况下,建议在编译中使用绝对路径。而不是使用“../".
其次,您可以尝试复制gcno和gcda文件以匹配“../../ code / lib / src / lib1 / a.c”。
或者修复建筑规则以确保没有应用破坏的相对路径(例如../../)