合并相同源码文件的不同的gcov覆盖率

相同库代码,生成不同类型的程序后(主要是被动态链接和静态链接),生成的gcov可能会不同,或者并发在不同机器上跑测试也会生成相同源码的不同gcov文件。

所以需要有个合并gcov文件的工具,但网上找了下没找到合适的,看了下gcov文件的内容,很规则,所以就自己写了一个,代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

if len(sys.argv) != 4:
	print("Usage: %s in1 in2 out"%sys.argv[0])

with open(sys.argv[1]) as f1, open(sys.argv[2]) as f2, open(sys.argv[3], "w") as fout:
	out_lines = []
	while True:
		f1_line = f1.readline()
		f2_line = f2.readline()
		if f1_line == None or f2_line == None or f1_line == "" or f2_line == "":
			break
		f1_line_info = f1_line.split(":")
		f2_line_info = f2_line.split(":")
		f1_line_no = int(f1_line_info[1])
		f2_line_no = int(f2_line_info[1])
		if f1_line_no != f2_line_no:
			print("Line NO. mismatch!")
			break
		print(f1_line_no)
		if f1_line_no == 0:
			if f1_line_info[2] == "Source" and f1_line_info[3] != f2_line_info[3]:
				print("File name mismatch!")
				break
		else:
			if f1_line_info[2] != f2_line_info[2]:
				print("Line mismatch!")
				break
		if f1_line_info[0][-1] != "-" and f1_line_info[0][-1] != "#":
			out_lines.append(f1_line)
		else:
			out_lines.append(f2_line)
	fout.writelines(out_lines)

这个对我来讲够用了,但还有如下缺点,使用时要注意:

  • 如果代码中含有冒号“:”,该行如果有差异可能无法对比出来
  • 没有合并执行次数
  • 代码行过多会消耗较多内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值