2025-02-25
oops
是Linux内核中用于处理严重错误的机制。当内核检测到无法恢复的错误(如空指针解引用、非法内存访问等)时,会触发oops
,打印当前状态信息(如寄存器、堆栈、调用链等),并尝试继续运行系统(而非直接崩溃)。
错误报告:在发生严重错误时,打印详细的调试信息(如寄存器、堆栈、指令指针等)。
系统恢复:尝试终止导致错误的进程,避免整个系统崩溃。
调试辅助:帮助开发者定位内核代码中的问题。
空指针解引用(NULL pointer dereference)。
非法内存访问(访问未映射或只读内存)。
除零操作(division by zero)。
未处理的硬件异常(如未对齐内存访问)。
显式调用BUG()
或panic()
。
BUG()
:触发无条件oops
BUG_ON(condition)
:当条件为真时触发oops
panic()
:触发oops
并终止系统运行。
WARN_ON()
:触发警告并打印堆栈,但不终止进程。
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = ffffffc000000000
[00000000] *pgd=0000000000000000, *pud=0000000000000000
Internal error: Oops: 96000004 [#1] PREEMPT SMP
CPU: 0 PID: 1234 Comm: my_module Tainted: G W O 4.19.0
...
Call Trace:
[<ffffffc000123456>] my_buggy_function+0x20/0x30
[<ffffffc000654321>] init_module+0x14/0x1000