Linus談偵錯程式
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中。沒人知道這些偵錯程式,我有什麼好難過的?
我以混蛋而自豪!