BUG_ON实现分析

传入的参数非法或为空,程序跑到了不可能的分支,

你可以使用 BUG_ON(1)

直接让系统奔溃,并打印当前的文件名,行数,及调用函数栈

问题暴露出来了,就好解决问题了,越早越好

#ifndef BUG_ON
#define BUG_ON(cond) assert(!(cond))
#endif

BUG_ON其实会调用assert

kernel中一般很少直接使用assert,当然user space 是使用assert,来快速定位出事代码行。

#define assert(p) do {	\
	if (!(p)) {	\
		printk(KERN_CRIT "BUG at %s:%d assert(%s)\n",	\
		       __FILE__, __LINE__, #p);			\
		BUG();	\
	}		\
} while (0)


最终BUG() 会调用panic,让系统奔溃

#define BUG() do { \
	printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
	panic("BUG!"); \
} while (0)


最后举个栗子:

BUG_ON(!list_empty)

 

你可能感兴趣的:(linux,kernel,assert,printk,BUG_ON)