【发布时间】:2012-12-07 02:46:58
【问题描述】:
我正在尝试在 Linux(Ubuntu) 上使用 gcov 来查看每一行源代码的执行频率。
我在我的 gcc 编译器和链接器标志中添加了以下标志,
CCFLAGS = -fprofile-arcs -ftest-coverage
LDFLAGS = -fprofile-arcs -lgcov
但是在编译和运行程序之后,我没有看到 *.gcda 文件被创建。结果,当我运行时
gcov --object-directory <path to the *.gcno/*.gcda files> myfile.cpp
显示错误:
myfile.gcda:cannot open data file, assuming not executed
File '../../../../../code/myfile.cpp'
Lines executed:0.00% of 2625
我错过了什么吗?如何解决这个问题?
【问题讨论】:
-
程序是否成功运行完成?
-
另外,运行
strings compiled_prog | grep gcda会得到什么? -
@Shawn - 它是一个不返回的服务/守护进程。所以基本上我必须在终端中对可执行文件进行 CTRL-C 来停止它。这会影响 gcov 的行为吗?我知道 gprof 不会为不退出()的此类进程生成分析数据。 gcov 也有这个限制吗?
-
@Shawn 关于您的第二个 cmets 字符串compiled_prog... 但似乎 gcov 正在寻找一个单独的 gcda 文件,而不是二进制文件中的 gcda 信息。我仍然会检查字符串命令的输出并更新
-
AFAIK,与 gprof 数据一样,覆盖率数据仅在
exit调用时输出,因此如果应用程序突然终止,您将不会获得输出。至于我的第二条评论,数据文件的输出路径通常嵌入在编译的二进制文件中,因此如果在编译后移动了二进制文件,它们可能不会出现在预期的位置。 (p.s. 这些 cmets 是基于过去的经验。自从我上次摆弄 gcov 以来,情况可能已经发生了变化。)