gcov输出文件路径问题(转)

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’
文件。但若把程序拷

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值