gcov是和gcc结合使用的测试代码覆盖率的一个工具(profiler),可用于发现代码的瓶颈。可以
做到(使用gcov最好不要优化编译):
1.每一行代码运行的次数
2.那些代码执行了
3.没一节代码所用的时间
gcov会创建一个名为‘sourcefile.gcov’的日志文件,他指示了代码运行的时间。此文件可被
gprof使用,gprof可从中给出时间信息。
gcov只支持gcc编译的代码,并且编译时必须有‘-fprofile-arcs -ftest-coverage’参数,它
高速编译器添加额外的对gcov有用信息以及在目标文件中加入产生profiling信息的代码。当运行这样
编译的程序时,每个以‘-fprofile-arcs’编译的目标文件所在的目录会生成一个相应的".gcda"文件。
每个以‘-ftest-coverage’参数编译时会生成".gcno"文件,它包含了重建基本块图表和指派行号的信
息。然后,以源文件名为参数运行gcov,gcov就可从".gcda"文件中获得每一行代码运行的频率。比如:
$ gcc -fprofile-arcs -ftest-coverage tmp.c
$ a.out
$ gcov tmp.c
注意,gcov必须在编译代码时所在的目录中运行,否则无法定位文件。另外,运行计数是累及的,若
运行gcov时没删除上次输出的文件,本次测试计数会累加到上次计数上,而不是覆盖。
gcov常用参数:
-a:输出每个基本块的运行计数,此选项可用于统计在同一行中的若干语句的各自运行次数
-b:输出分支语句频率信息到输出文件,以及概要信息到标准输出,但不显示无条件分支
-c:以数字而不是百分比显示分支频率
-n:不创建输出文件
-l:创建的输出文件名中包含头文件名,这对于头文件中包含代码并被多个源文件使用时有用
-p:在.gocv文件名中加入完整的路径信息,此时路径中的'/'用'#'表示,'..'用'^'表示
-f:输出每个函数的概要信息
.gcov文件的基本格式是:
执行次数(-表示改行没代码,#####表示改行从未执行过):行号:该行代码
交叉profiling:
gcov要求运行时在目标系统中有相同的编译时的绝对目录路径,为了支持交叉编译,可使用下面两个
环境变量重定位数据文件:
GCOV PREFIX - 指定加入到目标文件中的绝对路径前缀,默认没有前缀
GCOV PREFIX STRIP - 指示要跳过的目录层次
比如编译后目标文件在‘/user/build/foo.o’,编译后的程序执行时会创建‘/user/build/foo.gcda’
文件。但若把程序拷
- 浏览: 793726 次
- 性别:
- 来自: 大连
最新评论
-
dashengkeji:
1a64f39292ebf4b4bed41d9d6b21ee7 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
zi_wu_xian:
PageOffice操作excel也可以设置表格的行高列宽,并 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
wanggang0321:
亲,我在pptx(office2007以上版本)转pdf的时候 ...
JODConverter]word转pdf心得分享(转) -
xiejanee:
楼主:你好!我想请问下 你在代码中用DOMDocument* ...
Xerces-C++学习之——查询修改XML文档 (转)
相关推荐
3. **分析阶段**:使用 gcov 命令分析 `.gcda` 文件,输出覆盖率报告。 ##### 3.2 gcov 的选项 - **`-b`**:输出基本块信息。 - **`-c`**:显示条件覆盖信息。 - **`-s`**:显示源代码行号。 - **`-t`**:输出测试...
GCov使用的文件格式有严格的定义,包括文件头、版本信息、时间戳、函数标记、计数器标记等,这些都是为了精确地跟踪和记录代码覆盖率而设计的。 #### 六、GCC插桩前后汇编代码对比分析 当GCC编译器启用代码覆盖率...
接下来,安装 gem: gem install gcovtools 这应该会在您的路径中为您提供一个gcovtools可执行文件。 最后,以多种可能的方式之一执行gcovtools 。 例如,生成一个 HTML 覆盖率报告并将其通过管道传输到coverage....
- `-o`:指定输出文件的名字。 - `-I`:添加头文件搜索路径。 - `-L`:添加库文件搜索路径。 - `-l`:链接指定的库,如-lmath链接数学库。 - `-Wall`:开启所有警告。 - `-std`:指定使用的C/C++标准,如-gnu...
4. `-L`:添加库文件搜索路径。 5. `-l`:链接指定的库,如`-lgcc`链接GCC的运行时支持库。 6. `-Wall`:开启所有警告。 7. `-std`:指定语言标准,如`-std=c++11`启用C++11标准。 在开发过程中,GCC还提供了丰富的...
1. `-o`:指定输出文件的名称,如`gcc -o my_program my_source.c`。 2. `-c`:仅编译源文件,不链接,生成目标文件。 3. `-Wall`:开启所有警告选项,有助于发现潜在问题。 4. `-std`:指定C或C++标准,如`-std=...
- **目录选项**:用于指定源文件和输出文件的位置,例如: - `-isystem path`:指定系统头文件目录`path`。 - `-I path`:指定用户头文件目录`path`。 - **警告选项**:用于控制警告信息的输出,例如: - `-Wall...
提交.gcov文件是为了度量代码覆盖率,它显示了源代码中有多少行被执行到了。高覆盖率意味着更多的代码被测试,减少了未被发现的潜在错误。 8. **性能分析** .gprof文件提供了性能分析信息,帮助识别程序中的瓶颈...
1.5 arch指令:输出主机的体系结构 1.6 batch指令:执行批处理指令 1.7 bg指令:将程序放在后台执行 1.8 cd指令:切换目录 1.9 chfn指令:设置finger信息 1.10 chsh指令:改变登录系统时的shell ...
此外,Check还支持测试失败时的错误消息输出,以及测试结果的总结报告,帮助开发者快速定位问题。通过`check`命令行工具,可以方便地运行所有的测试,并查看测试覆盖率等信息。 在Linux系统中,Check可以与Gcov或...
cppcheck 的配置也很灵活,可以通过命令行参数来指定检查的规则集、忽略某些文件或目录、以及输出格式。它还支持自定义检查规则,允许用户根据项目需求扩展其功能。此外,cppcheck 提供的输出信息详细且易读,包括...
- `-L`:添加库文件搜索路径。 - `-l`:链接指定的库,如`-lpthread`链接线程库。 5. **链接库** 对于使用到的外部库,GCC会自动链接系统默认的库。若需链接自定义库,可以使用`-l`选项,如`-lmylib`。 6. **...
4. **编译选项**:GCC有许多编译选项,如`-c`只编译不链接,`-o`指定输出文件名,`-Wall`开启所有警告,`-O`系列用于优化等级设置等。正确使用这些选项可以提高代码质量和效率。 5. **调试信息**:使用`-g`选项可以...
9. **install**:将目标文件安装到系统路径中。 10. **list**:列出可以执行的目标。 11. **shell**:启动一个环境已调整过的shell,以便运行本地构建的程序。 12. **sphinx**:构建Sphinx文档,涵盖手册、教程和...
- **11.1 gcov-tool离线Gcda处理工具**:这是一个用于处理gcov生成的数据文件的工具,方便用户分析代码覆盖情况。 - **12.1 已知问题**:手册列出了使用GCC时可能遇到的一些常见问题及其解决方案。 - **13.1 报告...
- `-L`:添加库搜索路径。 - `-l`:链接指定的库。 - `-static`:创建静态链接程序。 - `-shared`:创建共享对象。 #### 五、GCC扩展功能 GCC还提供了一些对C和C++语言家族的扩展功能,例如: 1. **C语言扩展...
- 编译完成后,会生成静态库文件(通常是.lib或.a),将其添加到你的项目路径,以便链接使用。 2. **基本用法**: - 创建测试用例:在C++中,通过继承`testing::Test`类并定义`TEST_F`宏来创建测试用例。每个`...
7. 运行时选项:gtest支持命令行参数,如`--gtest_list_tests`列出所有测试,`--gtest_filter`筛选特定测试用例,`--gtest_output`指定输出格式和路径。 8. 覆盖率报告:虽然gtest本身并不直接支持代码覆盖率报告,...
6. **链接选项**:控制链接过程中的行为,如指定库文件路径、定义宏等。 #### 五、C语言实现定义的行为 GCC在处理C语言时,对于某些实现定义的行为提供了详细的解释和规定,包括但不限于: - **整型溢出处理**:当...