Linux内核调试打印输出?

时间:2011-02-14 11:46:48

标签: c debugging linux-kernel kernel printk

有没有更好的方法来调试Linux内核中的打印输出?

现在乱丢代码:

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

哪个不太干净。

整个行应该有一种方式#ifdef:以一种不错的方式编辑。

2 个答案:

答案 0 :(得分:16)

使用

/* 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定义。

答案 1 :(得分:2)

如果这是为了快速调试,只需printk()就可以正常工作。

如果这是为了在更多生产环境中进行调试,可以使用pr_debug(),这样就可以在运行时启用消息。

无论如何,(“%s:xxx”, func )通常就足够了。这些文件名和行号很快就会变得烦人。这也是你没有找到任何“标准”解决方案的原因 - 因为没有。