主要观点:介绍了用于调试的差异覆盖技术,通过比较成功测试和失败测试的代码覆盖来定位可能有问题的代码。
关键信息:
- 可以使用
go test
命令收集成功和失败的测试覆盖文件,如go test -coverprofile=c1.prof -skip='TestAddSub$'
和go test -coverprofile=c2.prof -run='TestAddSub$'
。 - 用
diff
命令比较两个覆盖文件,提取出失败测试独有的部分,如(head -1 c1.prof; diff c[12].prof | sed -n 's/^> //p') >c3.prof
。 - 差异覆盖技术能快速定位可能的问题代码,如在
math/big
的例子中,定位到natmul.go
中的问题代码。 - 该技术并非完全可靠,可能存在数据依赖等情况导致误判,但在很多情况下能节省调试时间。
重要细节: - 差异覆盖计算和显示成本低,在超过 15000 行代码中能定位到 10 个相关代码块,包括上述例子中的两个。
- 还可以查看单个失败测试的基本覆盖文件来指导调试,如明确哪些代码在测试中运行,哪些未运行。
- 差异覆盖也适用于通过的测试,如在
net/http
中查找特定功能的代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。