5

我正在尝试在 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

我是不是错过了什么。如何解决这个问题?

4

2 回答 2

4

您可以在代码中使用 __gcov_flush() 方法。您将需要从注册的信号处理程序中调用它。

看:

https://www.osadl.org/fileadmin/dam/interface/docbook/howtos/coverage.pdf

使用它,您可以保持服务运行并在需要转储覆盖数据时发出“kill”。

希望有帮助....

于 2012-12-20T20:58:14.257 回答
0

确保 gcov 和 gcc 的版本相同 :),这是许多人无法检查的地方。

$gcc --version
gcc (GCC) 4.1.1
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ find  /usr/lib/gcc -name libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/32/libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/32/libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/libgcov.a

所以你加载的 gcc 版本应该至少在 libgcov.a 的可用列表中

于 2014-03-21T14:51:51.990 回答