Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3522885
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: LINUX

2015-04-01 19:37:57

原文地址:BUG_ON() 作者:好喜儿



  1. <asm-generic/bug.h>
  2. #ifndef HAVE_ARCH_BUG
  3. #define BUG() do { /
  4.     printk("BUG: failure at %s:%d/%s()!/n", __FILE__, __LINE__, __func__); /
  5.     panic("BUG!"); /
  6. } while (0)
  7. #endif
  8. #ifndef HAVE_ARCH_BUG_ON
  9. #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0)
  10. #endif

作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。你可以把这些调用当作断言使用,想要断言某种情况不该发生 :
if (bad_thing)
BUG();
或者使用更好的形式:
BUG_ON(bad_thing);

可以用panic()引发更严重的错误。调用panic()不但会打印错误消息而且还会挂起整个系统。显然,你只应该在极端恶劣的情况下使用它:
if (terrible_thing)
       panic("foo is %ld/n", foo);

阅读(351) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~