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. 不要滥用:生产环境中应尽量避免触发
相关推荐
FoldWinCard1 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计2 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud1232 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质2 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX3 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.3 小时前
Linux系统管理
linux·运维
阿龙的工作记录3 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手4 小时前
Linux的基本指令
linux·运维·服务器
hkj88084 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动6 小时前
Linux编程笔记3【个人用】
linux·笔记