第1章 热身准备
Hack #1 调试是什么
调试的流程如下:
(1) bug复现;
(2) 调试;
(3) 确认执行过程(测试);
(4) 程序行为与预期相同,则停止;程序行为与预期不同,转到(2)。
Hack #2 Debug hacks的地图
图1-3和图1-4将故障分类为“异常停止”、“不停止”和“其他现象”,并分别说明原因区分方法和有关的hack编号。
内核有问题的现象:
区分方法 | 结果 |
ps | 显示中途停止,状态为D |
ping | 不返回响应 |
键盘 | 键盘无法输入 |
kill -9 | 无法结束程序 |
strace | 无法附加(attach)到进程(无响应) |
gdb | 无法附加(attach)到进程(无响应) |
查看内核信息 | softlockup等有输出结果 |
Hack #3 调试的心得
当复现他人发现的bug时,如果有疑问或需要更多信息,应当总结之后一起问。反复询问细小的问题会让人疲倦,所以应当先操作一遍,将问题、疑难事项总结之后再提问。此外,对方可能不告诉你重要信息,因为他觉得跟bug没关系,所以在听取时应当考虑这一点。
在匆忙中解决bug时,经常会犯下简单的错误,如配置错误等。无法复现时,应当确认网线、配置文件内容正确,并进一步用命令的输出确认是否有问题。
根据现象很容易想到“很可能是某个原因”,但不要仅凭表象做出没有根据的判断,而应当认真地确认,否则,就会与真正的原因擦肩而过。