1. 程式人生 > >如何成為一個好的程式設計師之(一)學會 Debug

如何成為一個好的程式設計師之(一)學會 Debug

除錯(Debug)是成為一個程式設計師的基石。除錯這個詞第一個含義即是移除錯誤,但真正有意義的含義是,通過檢查來觀察程式的執行。一個不會除錯的程式設計師等同於瞎子。

理想主義者認為設計、分析、複雜的理論或其他東西,是更基本的東西,他們不是現實的程式設計師。現實的程式設計師不會活在理想的世界裡。即使你是完美的,你也需要與在你周圍的主要軟體公司或組織 (比如-GNU-) 的程式碼,和你同事寫的程式碼打交道。這裡面大部分的程式碼以及它們的文件是不完美的。如果不能看透程式碼的具體執行過程,最輕微的顛簸都會把你永遠地丟擲去。通常這種可見性只能從實驗獲得,也就是,除錯。

除錯是一件與程式執行相關的事情,而非與程式本身相關。你從主要的軟體公司購買一些產品,你通常不會看到(產品背後的)程式本身。但程式碼不遵循文件的情況(讓你整臺機器崩掉是一個常見又特殊的例子)或者文件沒有說明的情況仍然會出現。更常見的是,你的程式出現了一個錯誤,當你檢查你寫的程式碼的時候,卻不知道這個錯誤是怎麼發生的。不可避免的,這意味著你做的一些假設並不對,或者一些你沒有預料到的情況發生了。有時候,神奇的修改原始碼的技巧可能會生效。當它無效時,你必須除錯了。

為了獲得一個程式執行過程的可見性,你必須能夠執行程式碼並且從這個過程中觀察到什麼。有時候這是顯而易見的,比如一些正在呈現在螢幕上的東西,或者兩個事件之間的延遲。在許多其他的案例中,除錯與一些不一定可見的東西相關,比如程式碼中一些變數的狀態,哪一行程式碼正在被執行,或者一些斷言是否持有了一個複雜的資料結構。這些隱藏的細節必須被顯露出來。

觀察一個正在執行程式的內部的方法通常可按如下分類:

使用一個除錯工具;

Printlining - 對程式做一個臨時的修改,通常是加一些行去列印一些資訊;

日誌 - 用日誌的形式為在程式的執行中建立一個永久的視窗。

當除錯工具穩定可用時,它們是非常美妙的,但Printlining和寫日誌甚至是更加重要的。除錯工具通常落後於程式語言的發展,所以在某些時候它們都可能是無效的。另外,除錯工具可能輕微改變程式實際執行的方式。最後,除錯有許多種,比如檢查一個斷言和一個巨大的資料結構,這需要寫程式碼並改變程式的執行。當除錯工具可用時,知道如何使用除錯工具是一件好事,但學會使用其他兩種方式也是至關重要的。

當除錯需要修改程式碼的時候,一些初學者會感到害怕。這是可以理解的,這有點像探索型外科手術。但你需要學會打破程式碼,讓它跳起來,你需要學會在它上面做實驗,並且需要知道你臨時對它做的任何事情都不會使它變得更糟。如果你感受到了這份恐懼,找一位導師 - 就是因為許多人在一開始面對這種恐懼的的時候表現的太脆弱,我們因此失去了很多本可以變成優秀程式設計師的人。


釋義

Printlining:在嚴格的臨時機制上,在程式中插入一些語句,為除錯輸出一些程式執行過程中的資訊。