2011-02-14 54 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)通常就足够了。这些文件名和行号很快就会变得令人讨厌。这也是为什么你还没有找到任何“标准”解决方案 - 因为没有。