最近已經不太貢獻時間到 Debian 計畫中,雖然日常工作、辦事還是全部使用 Debian GNU/Linux。做的比較多的大概是幫忙踩地雷,跟偶爾回報一些自己常用軟體的小問題。
相較於商業軟體軟體,在自由軟體或開放原碼社群,最棒的使用經驗就是如果你碰到了甚麼問題,而且你描述得當的話,通常有機會得到開發者的注意與修正。但是你得「描述正確」。作為一個嘴砲開發者,我不甚喜歡收到毫無意義的回饋,過度熱情的回報人往往造成小開發團隊的極大困擾,數量跟質量往往成反比,而低質量的大量回報只會降低團隊士氣跟產能。如果可以的話,我希望可以收到許多高質量的回饋,也期許自己盡力這麼作。
這裡不談基本的回報問題的方式,你若用 Debian 請參考 How to report a bug in Debian using reportbug 或 reportbug-ng,使用 Ubuntu 請參考 ReportingBugs。你若是新手,在你回報問題之前應該先讀 Simon Tatham 的如何有效地報告錯誤。這篇文章提供了一些基本的原則,你若碰到軟體使用的問題,應該試著按照文中的原則跟軟體開發者對話,可以避免殺死太多開發者的腦細胞,也可以幫你快點解決問題。
在先進的軟體中,不少已經內建 Crash reporter,像是 Gnome 的 Bug Buddy、Mozilla 的 Breakpad、Ubuntu 的 Apport 等等,這些工具會在你的軟體當掉時,自動收集一些系統資訊與程式狀態,並回報、收集到中央系統。這些資訊可以協助開發者收集一些技術性的資料,比「我的程式當掉了」這種回報更容易辨別錯誤所在。不過這些資訊只能提供一般性技術資料,並不方便作為直接除錯使用,大約可以利用於統計、分析軟體穩定性等加強軟體品質的用途。
若你恰巧不幸是軟體工程師,你可以試著利用 gdb 等試著收集更多資訊,甚至先進行初步的偵錯。但是我知道要求一般人重新編譯軟體加上除錯資訊等,再開啟暗黑 gdb 視窗下指令除錯,實在會嚇跑一些曾經習慣在其他平台只用 IDE 開發軟體的朋友。事實上,在 Debian 中還是有些工具可以讓你快速的進行軟體除錯,而且也有比較友善的工具可用。
你若要除錯,第一部大概是取得除錯資訊,預設的 Debian 套件是不含除錯資訊 (Debug symbols) 的,因為大部分的使用者不需要這些特別佔用空間的檔案。許多資深的 Debian Developer, 都會分別在包裝的套件時加上 Debug package,於是你可以在不重新編譯軟體的狀況下拿到同版的除錯訊息。 這些除錯套件的命名原則都是以 dbg 為結尾,例如以 Lifera 為例,你可以安裝 liferea-dbg。
另外你也需要原本的程式碼,這點可以直接利用 apt-get source 指令取得,例如以下指令,系統會自動抓回你目前安裝版本的原始檔,並自動解開。
apt-get source liferea
而除錯時,你需要一個除錯工具,上述提到了 gdb 這個工具,對一些朋友說,熟悉指令的學習門檻似乎有點高,不過你若熟練 gdb 的使用技巧,可以直接利用其強大的 sciprt 功能進行許多自動化的測試或對程式直接插入命令。有機會還是應該學習一下。圖性化的使用介面亦有相當多選擇,像是 ddd 或是 KDbg 等。這裡推薦一下 Gnome 中新的工具 nemiver,若你曾經用過其他除錯工具,大概看到 nemiver 的介面就知道該何使用。它基本上就是原始碼閱讀工具加上 Call Stack, Variables, Breakpoints, Registers, Memory 等觀看與編輯工具,圖形介面非常簡單直覺。
這裡以 liferea 為例子,若你想對其除錯,可用以下指令,使 nemiver 載入 lifera 擺在 /usr/lib/debug 的除錯資訊。nemiver 會詢問你原始檔位置,你可以將其指到剛剛利用 apt-get 下載的原始碼目錄,這樣便可以一邊除錯一邊閱讀其程式碼或設定除錯點 (Break points)
LD_LIBRARY_PATH=/usr/lib/debug nemiver liferea
畫面會像是
快快樂樂來抓蟲吧。