2011-02-14 51 views
10

有沒有更好的方法來調試Linux內核的打印輸出?Linux內核調試打印輸出?

眼下亂拋垃圾的代碼:

printk(KERN_DBG "%s:%d - %s() <message>", __FILE__, __LINE__, __FUNCTION__); 

這是不是很乾淨。

應該有一個方法,整行是#ifdef:ed在一些不錯的方式。

+0

也許你可以看看[這個問題](http://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are-used/4966975#4966975) – Kevin 2011-02-14 11:54:14

+0

凱文:謝謝,但它不是我想要的。我正在尋找一種方法來處理實際的調試打印輸出,而不是如何運行調試器。 – user616128 2011-02-14 12:20:07

回答

15

使用

/* At the top of the file, before any includes */ 
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 

#include <linux/printk.h> 

/* in code... */ 
pr_devel("foobar happened\n"); 

爲基礎(標準做法)。如果需要,您可以將__FILE____LINE__添加到pr_fmt定義中。

2

如果這是爲了快速調試,只是printk()運行良好。

如果這是爲了在更多生產環境下進行調試,可能使用pr_debug(),因此可以在運行時啓用消息。

無論如何,(「%s:xxx」,func)通常就足夠了。這些文件名和行號很快就會變得令人討厭。這也是爲什麼你還沒有找到任何「標準」解決方案 - 因爲沒有。