Linux核心除錯技術

2021-10-01 01:55:31 字數 2380 閱讀 4358

最常見的除錯技術和在應用程式中的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錯誤 編碼錯誤,如 寫成...