传入的参数非法或为空,程序跑到了不可能的分支,
你可以使用 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)