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 或错误。

另请参阅: