C ++使用gcov和lcov问题?

时间:2011-01-30 17:05:54

标签: c++ gcov lcov

我使用的是ubuntu 10.1,g ++编译器。

我尝试将gcov和lcov用于我的C ++项目。我设法编译gcov:

g++ -fprofile-arcs -ftest-coverage main.cpp user.cpp game.cpp

没有错误或警告消息。接下来我尝试运行gcov:

gcov main.cpp user.cpp game.cpp

也很好。我也尝试运行我的程序:

./a.out

再次运行gcov,我的主要用户和game.cpp现在显示了一些百分比。我想捕获数据,我在终端输入:

lcov --directory /home/projects/Game1/ -c -o application.info

但它给了我这个:

Capturing coverage data from /home/projects/Game1/
geninfo: ERROR: cannot read /home/projects/Game1/!

我在网上搜索,阅读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

3 个答案:

答案 0 :(得分:14)

请务必添加 -g 标记(调试信息):-g -fprofile-arcs -ftest-coverage

使用 lcov 时,我发现最好使用绝对路径而不是相对路径。您可以尝试使用lcov使用-i, - 初始切换来捕获初始零覆盖日期。

以下是我实现zerocounters的方法的一个例子

$ lcov --zerocounters --directory myFullPath
$ lcov --capture --initial --directory myFullPath --output-file myOutputFile

然后运行你的程序 然后捕获覆盖率数据:

$ lcov --no-checksum --directory myFullPath --capture --output-file myOutputFile

Finaly lcov使您能够生成html报告:

$ lcov/genhtml --highlight --legend --output-directory myOutPutHTMLdirectory myOutputFile

希望这会对你有所帮助。

答案 1 :(得分:2)

我有完全相同的问题。事实证明,如果库代码在您已经运行覆盖测试时发生了变化,有时会让人感到困惑。摆脱它的唯一方法是删除导致错误的文件并重新编译。

答案 2 :(得分:-3)

使用以下代码编译代码:

lcov --directory . --output-file app.info

然后使用以下内容制作html页面。

genhtml app.info