阅读代码仍然是调试多线程错误的最有效方法 | 南晓的博客

主要观点:过去一个月修复了两个多线程 bug,第一个 bug 是部分线程死锁,仅在少数生产机器上出现且频率不高,测试环境未出现;第二个 bug 是运行 3 - 5 小时后程序崩溃,因进入不应进入的代码路径触发断言,虽有核心转储文件但未找到线索。调试第一个 bug 的直接方法是检查所有锁和解锁操作在任何路径中是否成对,但不是根本原因,后来发现是复制粘贴错误导致;调试第二个 bug 是逐行检查与多线程访问有问题变量相关的代码,最终找到原因。在调试这两个 bug 的过程中,除了反复阅读代码外没有其他更好的方法,且两个 bug 的修复都很简单,只需修改一行代码。
关键信息:修复了两个多线程 bug,分别描述了两个 bug 的症状及调试过程,强调除读代码外无其他好方法及修复简单。
重要细节:第一个 bug 仅在少数生产机出现,第二个 bug 运行 3 - 5 小时后崩溃且有核心转储文件,调试第一个 bug 从检查锁操作到发现复制粘贴错误,调试第二个 bug 逐行检查代码找到原因。

阅读 25
0 条评论