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. 不要滥用:生产环境中应尽量避免触发
相关推荐
赖small强13 小时前
【Linux 网络基础】WebSockets 技术指南
linux·网络·https·websockets·ping/pong
司铭鸿14 小时前
化学式解析的算法之美:从原子计数到栈的巧妙运用
linux·运维·服务器·算法·动态规划·代理模式·哈希算法
代码AC不AC14 小时前
【Linux】调试器 gdb / cgdb
linux·gdb·调试器·cgdb
last demo14 小时前
MariaDB 数据库管理
linux·运维·服务器·数据库·php·mariadb
生信大表哥14 小时前
Python单细胞分析-基于leiden算法的降维聚类
linux·python·算法·生信·数信院生信服务器·生信云服务器
码上上班16 小时前
ubuntu 安装ragflow
linux·运维·ubuntu
HIT_Weston16 小时前
38、【Ubuntu】【远程开发】拉出内网 Web 服务:构建静态网页(一)
linux·前端·ubuntu
XH-hui16 小时前
【打靶日记】HackMyVm 之 hunter
linux·网络安全·hackmyvm·hmv
xu_yule17 小时前
Linux_15(多线程)线程安全+线程互斥(加锁)+死锁
linux·运维·服务器
wa的一声哭了18 小时前
并行计算 PCAM方法学
linux·运维·服务器·arm开发·python·spring·django