structstd.builtin.StackTrace[src]

This data structure is used by the Zig language code generation and therefore must be kept in sync with the compiler implementation.

Fields

index: usize
instruction_addresses: []usize

Functions

Functionformat[src]

pub fn format( self: StackTrace, comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype, ) !void

Parameters

fmt: []const u8

Source Code

Source code
pub fn format(
    self: StackTrace,
    comptime fmt: []const u8,
    options: std.fmt.FormatOptions,
    writer: anytype,
) !void {
    if (fmt.len != 0) std.fmt.invalidFmtError(fmt, self);

    // TODO: re-evaluate whether to use format() methods at all.
    // Until then, avoid an error when using GeneralPurposeAllocator with WebAssembly
    // where it tries to call detectTTYConfig here.
    if (builtin.os.tag == .freestanding) return;

    _ = options;
    const debug_info = std.debug.getSelfDebugInfo() catch |err| {
        return writer.print("\nUnable to print stack trace: Unable to open debug info: {s}\n", .{@errorName(err)});
    };
    const tty_config = std.io.tty.detectConfig(std.io.getStdErr());
    try writer.writeAll("\n");
    std.debug.writeStackTrace(self, writer, debug_info, tty_config) catch |err| {
        try writer.print("Unable to print stack trace: {s}\n", .{@errorName(err)});
    };
}

Source Code

Source code
pub const StackTrace = struct {
    index: usize,
    instruction_addresses: []usize,

    pub fn format(
        self: StackTrace,
        comptime fmt: []const u8,
        options: std.fmt.FormatOptions,
        writer: anytype,
    ) !void {
        if (fmt.len != 0) std.fmt.invalidFmtError(fmt, self);

        // TODO: re-evaluate whether to use format() methods at all.
        // Until then, avoid an error when using GeneralPurposeAllocator with WebAssembly
        // where it tries to call detectTTYConfig here.
        if (builtin.os.tag == .freestanding) return;

        _ = options;
        const debug_info = std.debug.getSelfDebugInfo() catch |err| {
            return writer.print("\nUnable to print stack trace: Unable to open debug info: {s}\n", .{@errorName(err)});
        };
        const tty_config = std.io.tty.detectConfig(std.io.getStdErr());
        try writer.writeAll("\n");
        std.debug.writeStackTrace(self, writer, debug_info, tty_config) catch |err| {
            try writer.print("Unable to print stack trace: {s}\n", .{@errorName(err)});
        };
    }
}