BUG() 和 BUG_ON()

BUG()

BUG() 是一个无条件触发内核错误的宏:

c 复制代码
BUG();  // 无条件触发内核错误

当执行到 BUG() 时,内核会:

  • 触发一个非法指令异常
  • 生成内核 oops 信息
  • 可能导致内核 panic(取决于配置)

BUG_ON(condition)

BUG_ON() 是一个条件判断宏:

c 复制代码
BUG_ON(condition);  // 如果条件为真,触发内核错误

等价于:

c 复制代码
if (condition)
    BUG();

使用场景示例

c 复制代码
// 检查指针是否为空
void my_function(struct device *dev)
{
    BUG_ON(dev == NULL);  // 如果dev为空,触发BUG
    
    // 正常的处理逻辑
    dev->ops->start(dev);
}

// 检查不可能发生的情况
int calculate_offset(int size)
{
    BUG_ON(size < 0);  // 大小不应该为负数
    
    return size * 2;
}

与 panic() 的区别

行为 使用场景
BUG()/BUG_ON() 触发 oops,可能继续运行 代码逻辑错误,不应该发生的情况
panic() 立即停止系统 系统无法继续运行的严重错误

实际效果

当触发 BUG 时,你会看到类似输出:

复制代码
kernel BUG at drivers/xxx/yyy.c:123!
Oops: 0000 [#1] SMP
CPU: 0 PID: 1234 Comm: process_name Tainted: G
... (堆栈跟踪信息)

开发建议

  1. 用于调试:主要用于开发阶段发现逻辑错误
  2. 不要滥用:生产环境中应尽量避免触发
相关推荐
七七七七073 小时前
【计算机网络】深入理解ARP协议:工作原理、报文格式与安全防护
linux·服务器·网络·计算机网络·安全
lhxcc_fly6 小时前
Linux网络--8、NAT,代理,网络穿透
linux·服务器·网络·nat
摇滚侠6 小时前
Spring Boot3零基础教程,Spring Boot 应用打包成 exe 可执行文件,笔记91 笔记92 笔记93
linux·spring boot·笔记
yuanManGan6 小时前
走进Linux的世界:初识操作系统(Operator System)
android·linux·运维
Thexhy7 小时前
在 CentOS 7 的 Linux 系统中配置 NFS
linux·运维·学习·centos
咯哦哦哦哦7 小时前
linux vscode+cmake+clangd
linux·ide·vscode
lang201509287 小时前
如何在 Linux 中获取更多信息
linux·运维·服务器
DeBuggggggg7 小时前
linux 安装Python3.9 且支持SSL
linux·运维·ssl
我是标同学7 小时前
vmware17安装ubuntu2204版本qemu运行armv8处理器uboot运行调试(包括windows)的一些工作
linux·运维·服务器
杨云龙UP8 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql