Panic 处理器 (Panic Handler)
在 Zig 中,panic 是指程序遇到了一个不可恢复的错误,并且无法以其他方式处理。默认情况下,当发生 panic 时,程序会终止并打印堆栈跟踪。
自定义 Panic 处理器
你可以提供一个自定义的 panic 处理器来控制当程序发生 panic 时会发生什么。这在嵌入式系统或需要特定错误报告机制的场景中非常有用。
自定义 panic 处理器是一个名为 panic 的函数,它接受一个字符串作为参数(message: []const u8)。
const std = @import("std");
pub fn panic(message: []const u8, error_return_trace: ?*std.builtin.StackTrace, _: @SrcLoc) noreturn {
std.debug.print("Panic! Message: {s}\n", . {message});
if (error_return_trace) |trace| {
std.debug.print("Stack trace:\n", . {});
std.debug.dumpStackTrace(trace.*);
}
@breakpoint(); // 在调试器中设置断点
std.process.exit(1); // 终止程序
}
何时发生 Panic
panic 通常在以下情况下发生:
- 在调试(
Debug)或安全发布(ReleaseSafe)模式下,程序执行了非法行为(例如数组越界、整数溢出)。 unreachable语句被执行。- 在
orelse unreachable中,如果可选值或错误联合为null或错误。
另请参阅:
- Illegal Behavior (非法行为)
- unreachable