作者:Linus
我不喜欢调试器,从来不,大概永远不会喜欢。我只使用GDB,而且我总是并不把它作为调试器
来使用,只是将其作为一个可以用来分析程序的分解器来使用。
任何关于内核调试器的意见、争论都没有触动我,哪怕是丝毫。相信我,这么多年来我收到很多这
方面的建议,到最后,他们都只能归结为很基础的(东西):
—— 开发应该变得更容易,我们能够更快的加入许多新的东西。
坦白地说,我并不在意(这个问题)。我认为对内核的开发不会是很容易的事。我不赞成那种通过
一个个代码逐步去寻找错误的做法。我认为系统的额外可见度并不是一件必要的好事。
很明显,如果你在没有使用一个内核调试器的情况下就附和这种观点:
—— 你会遇到一系列的问题:一旦出错,系统就会崩溃,你会失败;
—— Linux 内核编程太难太费时,人们会对其失去信心;
—— 创出新的特色需要一段很长的时间。
没有一个人能向我解释这些问题。
对我来说,这不是一个问题,这是它的特点。这不仅是已经有证明文件证明的,而且这是好事。因
此很明显这不是一个问题。
“创出新的特色需要一段很长的时间”——这一点在调试器方面尤为不是一个强有力的论据。对
Linux 来说,缺少特色或新代码不是一个问题,事实上,这对整个软件产业来说都是如此。相反,
我的主要工作就是对那些新的特色/特征说“不”,而不是去寻找它们。
的确,当(系统)崩溃,你甚至不能获得一丝线索,只有失败,那么只能得到两种结果:你要么小
心翼翼的重新开始;要么开始对内核调试器不断抱怨。
坦白的说,如果(工程进程中)出现粗心大意的情况,我宁愿摈弃那些在开始时就没有小心谨慎的
人。这听上去很无情,就算是上帝听上去也会感觉无情。但这并不是人们所认为的那种“如果你不
能承受压力,那就干脆离开”的情况。这里(所包含的意义)要更深一些。我宁可不和那些粗心大
意的人一起工作。这就是软件发展的进化论。
这样把人分成两种是一个冷酷、无情的观点。我宁愿选择第一种人,忍受他们。
我是一个比较自私的人。我完全不知道人们为什么要从不同方面进行考虑,但是他们确实是(那么
做的)。人们认为我是个好人,但事实上我是个诡计多端的自私鬼,只要最终能得到我所认为的更
好的系统,那么我对任何感情的伤害或工作时间的损失都不在乎。
我并不只是(在口头上)说说而已,我真的不是一个很好的人。我能面无表情地说“我不在乎”,
而且我确实不在乎。
我相信不使用内核调试器会迫使人们在一个不同的层次上考虑问题。我认为如果你不使用调试器,
你就不能得知他如何运转以及你如何处理,你就试图从别的角度去考虑问题。你会想在不同的层次
上理解事情。
在一定程度上更多的是“源代码对二进制”(的问题)。你不必不得不去查看源代码(当然你可以去
查看,任何优良的调试器使其轻而易举)。你必须在源代码之上的层次进行查看。就是说,不使用
内核调试器的话,你将不得不去理解程序在做什么,而不仅仅是特定的(代码)行。
坦白的说,对于许多实际问题(这和错误截然不同的,那些愚蠢的错误是那么多)来说,调试器并
没有多大的作用。这些实际问题正是我所担心的。剩下的就是一些细节了,他们最终都会被确定下
来。
我能理解那些与我不一致的意见。我不是你们的母亲,如果你愿意的话你可以使用内核调试器,我
不会因为你自己的“毁誉”而轻视你。但是我不会去协助你使用他,我真诚希望人们不要高频率地
使用内核调试器。因此我不会将其作为评定的标准,如果现有的调试器没有被人们很好的了解,我
不会去(刻意)糟蹋贬低他。
因为我是一个比较自私的人,但是我以此为荣!
Linus