Linux内核调试入门指南
1. 软件调试概述
在软件开发领域,bug指的是代码中的缺陷或错误。软件开发者的一项关键且通常占比较大的工作,就是找出并修复这些bug,尽可能让软件无缺陷且按设计精确运行。
要修复bug,首先得找到它。对于复杂的bug,往往在某个事件暴露问题之前,开发者甚至都意识不到它的存在。这就凸显了质量保证(QA)流程,也就是测试的重要性。测试是软件生命周期中至关重要的一环,就像没人会自愿乘坐一架未经测试的新飞机一样。
一旦发现并记录了bug,开发者的任务就是找出其根本原因。确定根本原因并理解潜在问题后,通常就能修复bug。这个使用工具、技术和深入思考来找出bug根源并修复的过程,就是调试。
关于“调试”一词的起源,有个流传很广的故事。1947年9月9日,星期二,在哈佛大学,格蕾丝·霍珀海军上将的团队在一台Mark II计算机的继电器面板中发现了一只飞蛾。由于飞蛾导致系统故障,他们移除飞蛾,从而“调试”了系统。不过,格蕾丝·霍珀本人表示她并未创造“调试”这个术语,而且该术语的起源似乎与航空学有关,但“调试”这个词一直沿用至今。
2. 软件bug实际案例
软件控制机电系统在当今世界十分普遍,但软件工程是一个相对年轻的领域,人类又容易犯错,这就可能导致软件运行不符合设计要求,从而引发不幸事故。以下是一些实际案例:
2.1 爱国者导弹故障
海湾战争期间,美国在沙特阿拉伯达兰部署了爱国者导弹系统,用于跟踪、拦截和摧毁伊拉克的飞毛腿导弹。然而,1991年2月25日,一个爱国者系统未能完成任务,导致28名士兵死亡,约100人受伤。调查发现,问题出在软件跟踪系统的核心部分