2014-02-19 71 views
1

我試圖調試os161,並且由於缺少調試信息而遇到麻煩。我的任何函數都沒有行號信息,所以我可以做類似「b lock_acquire」的事情,但是當我做「s」時,它會說「單步執行直到退出函數lock_acquire, 」,它沒有行號信息。當我嘗試執行「l lock_acquire」時,我也會得到「無行號已知錯誤」,並獲得「當前上下文中沒有符號鎖定」。當我在lock_acquire時輸入「p lock」。此外,當我輸入ptype curthread時,它會顯示「數據變量,找不到調試信息」,而不是有用的東西。我用這裏的配置方向http://www.cdf.utoronto.ca/~csc369h/fall/docs/configure.shtml。編譯os161時有什麼方法可以添加更多的調試信息嗎?將調試信息添加到os161

編輯: 要啓動gdb我在一個窗口中鍵入

% cd ~/os161/root 
% sys161 -w kernel 

,然後在第二窗口中鍵入

% cd ~/os161/root 
% cs161-gdb kernel 
(gdb) target remote unix:.sockets/gdb 

回答

0

有幾種方法可以調試內核,一種方式是直接向內核添加調試消息。例如 在系統中添加DEBUG宏。 (lib.h)

... 
DEBUG(DB_SYSCALL, "Entering into user mode\n"); 
... 

另一種可以像剛剛說的那樣使用GDB的方法。不要使用's',你應該使用'n'和'bt'來檢查步驟。沒有閱讀任何錯誤,我不知道如何提供更多的信息。我希望這有幫助。