23.3. 對 dump 的事後分析

如果您並不知道會有 kernel dump,所以您沒有用 config -g 編譯您的 kernel,這時該怎麼做呢? 沒關係,不用怕,不是所有的東西都無用了。

當然,您仍要啟動 crash dump。參考上面的選項來做這件事。

到您的 kernel compile 子目錄 (/usr/src/sys/arch/conf) ,編輯您的設定檔。取消下列這行的註解 (如果不存在,就新增此行)

    makeoptions    DEBUG=-g                #Build kernel with gdb(1) debug symbols

重建整個 kernel,由於 Makefile 的 time stamp 有改變, 所以還是會有一些其它的 object file 會被重建, 像 trap.o 如果您運氣不差, 新增的 -g 並沒有讓產生的碼有所改變, 您就可以用新的 kernel 裡的除錯資料來除錯原本出錯但沒有除錯資料的 kernel。您最少應該用 size(1) 這個命令來比較一下新舊兩個 kernel。 如果兩者有差異,您可能就要放棄了。

這時就可以按照前述的方法來檢驗 dump。 不過有些地方的除錯資料會不完整,像可能會在例子中的 stack trace 裡看不到某些函數的行號跟參數列。如果您需要更多的 debug symbols 和重複 gdb 操作過程直到您得到足夠的資料為止。

不保證這能完全運作,但在多數的狀況下還算不錯。