8

我正在使用 ubuntu 10.1,g++ 编译器。

我试图在我的 C++ 项目中使用 gcov 和 lcov。我设法编译了 gcov:

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

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

gcov main.cpp user.cpp game.cpp

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

./a.out

然后再次运行 gcov,我的 main、user 和 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
4

3 回答 3

14

请务必包含-g标志(调试信息):-g -fprofile-arcs -ftest-coverage

在使用lcov时,我发现使用绝对路径而不是相对路径更好。您可以尝试使用 lcov 通过 -i, --initial 开关捕获初始零覆盖日期。

这是我实现零计数器的方法的一个例子

$ 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

希望这对您有所帮助。

于 2011-02-01T10:48:14.933 回答
2

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

于 2013-11-15T14:56:43.523 回答
-5

使用以下代码编译代码:

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

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

genhtml app.info
于 2012-06-29T06:51:31.507 回答