活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
Oops错误对于经常接触kernel的人来说应该是相当眼熟了,毕竟时不时偶尔有些令人头疼的稀奇古怪的错误(如内核崩溃,空指针,内存访问越界)蹦出来,而这些大多数是Oops。Oops的信息我们只能靠崩溃之后打印出来的异常调用栈信息来定位问题的位置和原因。

关于debug信息由宏CONFIG_BUG控制
//kernel/include/asm-generic/bug.h
#ifndef __ASSEMBLY__
......
#ifndef HAVE_ARCH_BUG
#define BUG() do { \
printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
barrier_before_unreachable(); \
panic("BUG!"); \
} while (0)
#endif
#ifndef HAVE_ARCH_BUG_ON
#define BUG_ON(condition) do { if (condition) BUG(); } while (0)
#endif
......
#else /* !CONFIG_BUG */
......
#ifndef HAVE_ARCH_BUG
#define BUG() do {} while (1)
#endif
#ifndef HAVE_ARCH_BUG_ON
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
#endif
#endif /* __ASSEMBLY__ */