1、单测
chromium 原生的单测程序能尽早地暴露我们在对网络库进行定制化开发过程中会引发的 Bug,因此认真对待单测可为网络库定制化开发保驾护航。
1.1 确认代码迁移引起的 case
跑 NQE、QUIC 迁移后的统一网络库的单测程序 net_unittests,出现较多 fail 和 少数 crash 的 case; 从 fail case 看,与迁移的代码看起来无直接关联,因此直接阅读源码来定位原因显得较为困难且耗时可能比较长;
那么首先要做的是,确认这些 case 是因为代码迁移引起的,所以需要对比迁移前后 net_unittests 的 case 的差异,只分析确实是迁移代码引起的 case,避免将时间花在不是代码迁移引起 fail/crash 的 case 上;
1.2 输出可单步调试的 net_unittests
chromium 项目输出的可执行文件默认都是没有调试符号的,需要将输出目录下的 args.gn 中的 symbol_level 的值改为 2,这样所有输出的可执行文件就带有了调试符号,从而可以使用 gdb 进行单步调试:

Ubuntu 下使用 gdb 调试 net_unittests 的效果:

1.3 选择性执行单测
当跑完 net_unittests 的全部单测时,它会汇总出一个 fail/crash 的信息(考虑版面大小,删除了下图部分 case),可以看到全部单测跑完需要差不多 半

本文详细介绍了在Chromium中进行网络库定制化开发时,如何通过单测来发现问题并进行定位。内容包括:1) 分析单测失败案例,对比迁移前后差异;2) 使用gdb进行单步调试;3) 通过--gtest_filter选择性执行单测;4) 深入源码定位crash原因,发现因kDefaultMaxPacketSize值的修改导致问题,并修复。
1146

被折叠的 条评论
为什么被折叠?



