Linus在2000年的一封邮件中谈论了他对调试器(debugger)的看法:https://lkml.org/lkml/2000/9/6/65
Tigran Aivazian邮件中写到
(对缺少调试器带来的问题 )说的很好,如果能知道知道Linus意见就更棒了。我的意思是我知道很久以前Linus对debugger并不待见,现在会不会有变化?他也是人,想法也可能会变的,所以以目前kdb的稳定性和高质量会不会被你合并到Linux中。
Linus回复
我不喜欢debugger,以前不会,以后也不大可能会。我每天都使用kdb,但是我把kdb当做增强版diassembler来用。
针对内核调试器的讨论压根一点也没有打动我,相信我,这么多年我听了很多这样的讨论,但是最后基本上可以总结为
- 这会让开发变得简单,借助内核调试器我们能快速添加新的东西到内核中
坦白讲,我根本不在意。我不认为内核开发要变得简单。我不容忍单步调试来找bug。我不认为调试器让系统过分透明是好事情。
表面上,如果你相信这样的言论,不用调试器会导致不同的问题
- 程序出现问题导致崩溃,使用fsck耗时太久,这会让你沮丧。
- 内核开发太难,太耗时哦,人们会放弃尝试
- 新增内核新功能太耗时了
谁来告诉我为什么上面这些限制是个坏事。
对我来讲,这不是bug,这是feature。Linux内核开发不仅有文档,而且质量高,所以显然不是bug。
花更多时间开发一个功能 - 这根本不是需要debugger的理由,对于Linux来说,缺少功能和新功能并不是问题,实际上,恰巧相反对于整个软件来说,我的最大工作却是对新功能说不,而不是去寻找这些新功能。
诚然,当发生崩溃的时候,运行fsck,甚至不知道为什么会挂掉,你是会感到沮丧。不过对此会有两种反应:从此以后你就学会了小心。或者你去抱怨没有内核调试器。
坦白讲,我宁愿先清除哪些不仔细的人,而不是迟到的人。这听起来很无情,对,确实无情。这不是怕热还当啥厨师这么简单,它有更深的含义:我不愿意和这种不仔细的人工作,这是软件开发中的达尔文主义(优胜劣汰)。
指出这两种人确实很冷酷和无情,我不和第二种人工作。要么忍,要么滚!
我是个不近人情的混蛋,我不知道为什么别人不这么看我,而是认为我是个友好的人。实际上我是一个心机婊和自私的混蛋,如果能让系统更好,我他妈的才不管你浪费了几个小时或者伤着你的感情了。
我也不是说我真的不友好,我是一本正经的说:我不在意这些,而且故意这么吊。
我他妈相信没有内核调试器会强制他们站在不同的深度上思考他们的问题。没有调试器,你不会纠缠在于系统的行为细节,在这个级别去修复这个问题。没有调试器,你会从另一个角度去想这个问题,你会更加深入的理解问题本身。
这一定程度上是源代码和二进制的比较,但是不止于此。不是说你不要去看代码,而是说你要站在源代码上面去思考问题。真正的意义在于,你会更一步的思考:你程序是干什么的,而不是那一行代码是干什么的。
同时坦白讲,很多真正问题调试器是帮不上忙的(而不是什么特定的bug本身,确实很多这样的bug,比如最近”truncate()”的吊问题)。我关心的是真正问题,其他的都是一些细节,细节上的问题总能解决的。
我知道其他人不同意,我不是你妈,你爱用就用。你身上有屎管我吊事。我不会帮你选调试器,我更喜欢那些不怎么用调试器的人。所以我不会把调试器放到标准Linux中。没人知道这些调试器,我有什么好难过的?
我以混蛋而自豪!
Comments: