Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1298110
  • 博文数量: 168
  • 博客积分: 2124
  • 博客等级: 大尉
  • 技术积分: 2590
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-16 23:51
文章分类

全部博文(168)

文章存档

2014年(6)

2013年(74)

2012年(71)

2011年(17)

分类: LINUX

2012-08-09 19:56:07



  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);

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