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)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值