最常見的除錯技術和在應用程式中的printf一樣,將鎖需要的資訊通過控制台輸出
int console_printk[4] = ;
核心中定義列印級別如上所示(linux-3.4.2\kerne\printk.c ),定義幾個巨集,將其放入console_printk[4]
使用cat /proc/sys/kernel/printk
可以檢視列印等級
使用echo 「8 4 1 7」 > /proc/sys/kernel/printk
可以將列印等級設定為8 4 1 7
解析上面4個巨集的意思:
同目錄標頭檔案linux-3.4.2\linux-3.4.2\include\linux\printk.h 有以下定義
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
其中:
console_loglevel :表示當前console的log級別,只有更高優先順序的log才被允許列印到console(注意:這裡的更高優先順序表示數值更小,在linux中小數字表示優先順序更高或者更早生成)
default_message_loglevel :表示不指定log級別時,printk預設使用的log級別(即在使用printk時字串前面不加列印級別);
minimum_console_loglevel :console能設定的最高log級別;
default_console_loglevel :預設的console的log級別。(最後兩個在平時不起作用,只有在設定console_loglevel 時才有用,具體作用參見kernel/printk.c裡面的do_syslog函式)
使用方法
#define kern_emerg "<0>" /* system is unusable */
#define kern_alert "<1>" /* action must be taken immediately */
#define kern_crit "<2>" /* critical conditions */
#define kern_err "<3>" /* error conditions */
#define kern_warning "<4>" /* warning conditions */
#define kern_notice "<5>" /* normal but significant condition */
#define kern_info "<6>" /* informational */
#define kern_debug "<7>" /* debug-level messages */
在列印前面加上以上巨集中乙個表示該列印語句的列印級別,
例如:
printk(kern_debug"file = %s, function = %s, line= %d.\n\r",__file__, __function__,__line__);
最常見的核心除錯語句,列印出執行此語句的函式以及在檔案中的行數。
strace是個功能強大的linux除錯分析診斷工具,可用於跟蹤程式執行時程序系統呼叫(system call)和所接收的訊號,尤其是針對原始碼不可讀或原始碼無法再編譯的程式。
在linux系統中,使用者程式執行在乙個沙箱(sandbox)裡,使用者程序不能直接訪問計算機硬體裝置。當程序需要訪問硬體裝置(如讀取磁碟檔案或接收網路資料等)時,必須由使用者態模式切換至核心態模式,通過系統呼叫訪問硬體裝置。
strace可跟蹤程序產生的系統呼叫,包括引數、返回值和執行所消耗的時間。
strace引數如下:
-p : 跟蹤乙個pid程序
-f: 繼續子程序的跟蹤
-t: 列印出每次呼叫所花費的時間,單位:秒
-c: 統計和報告每個系統呼叫所執行的時間、呼叫次數和出錯次數等
-o : 指定儲存strace輸出資訊的檔案
使用方法:
strace -o log.txt ./test
log.txt表示生成的檔名(任意)
./test為執行的程式(可以應用程式也可以是載入驅動之類的)
linux核心動態除錯技術
動態除錯功能就是你可以決定在程式執行過程中是否要 pr debug dev dbg print hex dump debug print hex dump bytes 這些函式正常執行起來。編譯核心 開啟config debug fs和config dynamic debug echo n file...
linux 核心除錯
debug.hacks 一書中,介紹了如果除錯核心問題,在第五章的 實踐核心除錯 總體來說,有一下的方法來除錯核心 1.用kgdb單步除錯。具體請參見 2.加列印printk來定位。3.根據核心出錯的kernel panic oops資訊,反彙編,定位問題 4.編寫復現程式,或者創造復現條件。5.g...
Linux除錯技術
內容 1.熟悉一些常用的除錯技巧 2.熟悉gdb偵錯程式的使用 3.熟悉斷言的使用,4.熟悉記憶體除錯 1.常用除錯技巧 coding完成之後的debg過程 1.1 常見錯誤 a.功能錯誤 需求分析錯誤 b.設計錯誤 程式的架構,設計的資料結構,功能實現方式錯誤 c.code錯誤 編碼錯誤,如 寫成...