C++ 使用 gcov 和 lcov 的问题?
Posted
技术标签:
【中文标题】C++ 使用 gcov 和 lcov 的问题?【英文标题】:C++ Using gcov and lcov problem? 【发布时间】:2011-06-18 04:02:47 【问题描述】:我使用的是 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
【问题讨论】:
保证目录名称拼写正确并包含您的代码和对象?您是否尝试在该目录中以lcov --directory .
运行它?
我编辑了我的问题,你是对的:我愚蠢的“粗心”。但是,新的错误信息也打败了我:geninfo: ERROR: /home/Projects/Game1/main.gcno:达到了文件的意外结尾
我也出现同样的错误,请问你最后运气好吗?
你只安装了一个 gcc 版本吗?我在将 g++4.7 安装到 Ubuntu 12.04 并默认安装时遇到了同样的问题,但是当我检查 gcov 版本时,它是 4.6。真正的 /usr/bin/gcov 只是 gcov-4.6 的符号链接,所以我尝试将其修复为 gcov-4.7,之后我从 bash 获得了正确的工作 gcov,但 lcov 的错误相同。我的解决方案是使用 g++4.6 而不是 g++(到 g++4.7 的符号链接)
【参考方案1】:
使用以下代码编译代码:
lcov --directory . --output-file app.info
然后使用以下内容制作html页面。
genhtml app.info
【讨论】:
-1lcov
不会编译代码,genhmtml
应该是 genhtml
。【参考方案2】:
我遇到了完全相同的问题。事实证明,如果库代码在您已经运行覆盖测试时发生更改,有时它会感到困惑。摆脱它的唯一方法是删除导致错误的文件并重新编译。
【讨论】:
这也解决了我的问题。谢谢。【参考方案3】:确保包含 -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
最后 lcov 使您能够生成 html 报告:
$ lcov/genhtml --highlight --legend --output-directory myOutPutHTMLdirectory myOutputFile
希望对你有所帮助。
【讨论】:
以上是关于C++ 使用 gcov 和 lcov 的问题?的主要内容,如果未能解决你的问题,请参考以下文章
使用 gcov/lcov/gcovr 在 Android APK 下获取代码覆盖率