在900多年前的一个秋夜,一轮明月高高地挂在黄州的天空。夜深了,很多人都已经入睡。但在承天寺的庭院里,还有两个人在散步。他们一边交谈,一边欣赏美丽的夜景。洁白的月光泼洒在庭院里,像是往庭院里注入了一汪汪清水,把地面变成了水面,清澈透明。翠竹和松柏的影子映在其中,随风摇摆,仿佛水草在晃动。这两个人,一位是大文豪苏轼,另一位是他的好朋友张怀民。这一年是1083年,苏轼46岁。
可能是在当晚,也可能是在第二日,苏轼写了一篇短文来记录这次夜游。这篇短文便是著名的《记承天寺夜游》。第一次看到这篇散文,我便爱不释手。每次读苏轼文集,都喜欢把这一篇再读一遍。文章很短,不足百字,但意境隽永,令人回味无穷。
“元丰六年十月十二日夜,解衣欲睡,月色入户,欣然起行。 念无与为乐者,遂至承天寺寻张怀民。怀民亦未寝,相与步于中庭。庭下如积水空明,水中藻荇交横,盖竹柏影也。”
文末的议论尤其脍炙人口:“何夜无月?何处无竹柏?但少闲人如吾两人者耳。”
诚然,月夜常有,竹子和松树也很平常,但是这样的夜游不常有。
2013年深秋,与十几位喜欢调试技术的朋友在庐山五老峰下的白鹿洞书院聚会,吃过晚饭大家坐在古老的书院里交流调试技术,直到夜里10点左右。然后,大家又聚集在延宾馆的庭院里,一边海阔天空地聊天,一边欣赏美丽的夜景。说话的间隙可以听见院子外面贯道溪的哗哗水声;抬起头,便看到满天的星斗。
2008年6月3,笔者收到了出版社快递给我的《软件调试》第1版,喜不自禁,写了一篇博客,名为“手捧汗水的感觉”。
弹指一挥间,十年过去了。十年中,因为《软件调试》笔者认识了很多朋友。他们有不同的年龄,不同的背景,工作在不同的地方,但都有一个共同点,读过《软件调试》。
2011年9月,《软件调试》第1版出版3年后,便开始计划和写作第2版。但只坚持了一年便停顿了。之后写写停停,进展很缓慢。直到2016年年底,从工作了十几年的英特尔公司辞职后,笔者才又“重操旧业”。
过去的十年中,计算机领域发生了很多重大的变革。顺应这些变革,新的版本需要增加很多内容。简单来说,第2版要新增以下内容。
- 关于CPU增加ARM处理器的相关内容。
- 关于操作系统增加Linux系统的相关内容。
- 编译器增加GCC的相关内容。
- 调试器增加GDB的相关内容。
- 增加全新的GPU内容。
新增这些内容后,如果再装订成一本书,那么肯定比砖头还厚。经过反复思考和调整,最后终于确定了分卷出版的方案。卷1覆盖处理器等基础内容,卷2、卷3分别介绍Windows系统和Linux系统的调试。
确定了新的分卷结构后,笔者强迫自己投入更多的时间写作,快步向前推进。终于在2018年6月把卷1的书稿发给了出版社。
卷1共16章,分为4篇。
第一篇:绪论(第1章)
作为全书的开篇,这一篇介绍了软件调试的概念、基本过程、分类和简要历史,并综述了本书后面将详细介绍的主要调试技术。
第二篇:CPU及其调试设施(第2~7章)
CPU是计算机系统的硬件核心。这一篇以英特尔和ARM架构的CPU为例,系统描述了CPU的调试支持,包括如何支持软件断点、硬件断点和单步调试(参见第4章),如何支持硬件调试器(参见第7章),记录分支、中断、异常和支持性能分析的方法(参见第5章),以及支持硬件可调试性的错误检查和报告机制——MCA(机器检查架构)(参见第6章)。为了帮助读者理解这些内容,以及本书后面的内容,第2章介绍了关于CPU的一些基础知识,包括指令集、寄存器和保护模式,第3章深入介绍了与软件调试关系密切的中断和异常机制。与第1版相比,第2版不仅扩展了原来关于x86处理器的内容,并新增了ARM处理器的内容。
第三篇:GPU及其调试支持(第8~14章)
这是第1版没有的全新内容,分7章深入探讨了Nvidia、AMD、英特尔、ARM和Imagination这五大厂商的GPU。从某种程度上说,CPU的时代已经过去,GPU的时代正在开启。经历了半个多世纪的发展,CPU已经很成熟,CPU领域的创新机会越来越少。CPU仍会存在,但不会再热门。而GPU领域则像是一块新大陆,有很多地方还是荒野,等待开垦,仿佛19世纪的美国西部,或者20世纪末的上海浦东。
第四篇:可调试性(第15~16章)
提高软件调试效率是一项系统的工程,除了CPU、操作系统和编译器所提供的调试支持外,被调试软件本身的可调试性也是至关重要的。这一篇首先介绍了提高软件可调试性的意义、基本原则、实例和需要注意的问题(参见第15章),然后讨论了如何在软件开发实践中实现可调试性(参见第16章)。第16章的内容包括软件团队中各个角色应该承担的职责,实现可追溯性、可观察性和自动报告的方法。
在内容格式上,第2版也有所变化。首先,新增了名为“格物致知”的实践模块。读者可以下载试验材料,然后按照书中的指导步骤进行操作。在理论和实践方面,朱熹曾说:“言理则无可捉摸,物有时而离。言物则理自在,自是离不得。”这句话的意思是,空讲理论可能让人摸不着头脑,把理论和实践分离开来;相反,讲具体的事物,自然就包含了道理,二者是分不开的。好一个“言物则理自在”,真是至理名言。其实,“言物”除了有朱熹说的“言物则理自在”好处外,还有生动有趣的优点。为此,第2版不仅新增了专门言物的“格物致知”模块,很多章节的正文内容也是本着这个思想来写作的。
另外,第2版还增加了评点模块:“老雷评点”和“格友评点”。“老雷评点”是“格蠹老雷”所评,“格友评点”为“格友”评点。“格蠹老雷”是笔者的绰号。“格友”者,“格蠹老雷”之友也。“格”字源于上文所说之格物。在古老的“易经”中,8个基本符号中有一个为震,象征雷,代表着锐意创新和开拓进取。
感谢苏轼,他用优美的文字清晰记录了900多年前的那个夜晚。感谢更多曾经著书立说的前辈,他们用文字向我们传递了他们的思想和智慧。
感谢缔造软件的前辈们,他们创造了一种新的形式来传递智慧。感谢父母,把我生在这个美好的软件时代。乐哉,三生有幸做软件。
因为书,自古便有读书之乐,穿越时光,悟前人心境,获前人智慧。因为软件,今天有调试之乐,电波传语,与硅片对谈,赏匠心之美,品设计之妙。希望本书可以让读者同时体验读书之乐和调试之乐。当然,如果读者能以此结缘,结交一两个可以在月朗星稀之夜“相与步于中庭”的朋友就更好了。
张银奎(Raymond Zhang)
2018年7月25日于上海格蠹轩
|