diff options
author | 2023-04-14 23:08:29 -0700 | |
---|---|---|
committer | 2023-04-14 23:08:29 -0700 | |
commit | 81e11ae58663d07b960c9da4d36f378d09bfbfdb (patch) | |
tree | 13b1e421edf040cae647995f1079d19853831568 | |
parent | 0d248568f6777cbc675b16415873b322b1b20abc (diff) | |
download | bun-81e11ae58663d07b960c9da4d36f378d09bfbfdb.tar.gz bun-81e11ae58663d07b960c9da4d36f378d09bfbfdb.tar.zst bun-81e11ae58663d07b960c9da4d36f378d09bfbfdb.zip |
Include the error return trace
-rw-r--r-- | src/report.zig | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/src/report.zig b/src/report.zig index ee0366263..192f0bab7 100644 --- a/src/report.zig +++ b/src/report.zig @@ -299,7 +299,7 @@ pub noinline fn handleCrash(signal: i32, addr: usize) void { std.c._exit(128 + @truncate(u8, @intCast(u8, @max(signal, 0)))); } -pub noinline fn globalError(err: anyerror) noreturn { +pub noinline fn globalError(err: anyerror, trace_: @TypeOf(@errorReturnTrace())) noreturn { @setCold(true); if (@atomicRmw(bool, &globalError_ranOnce, .Xchg, true, .Monotonic)) { @@ -466,6 +466,14 @@ pub noinline fn globalError(err: anyerror) noreturn { error.NotOpenForReading, error.Unexpected => { const limit = std.os.getrlimit(.NOFILE) catch std.mem.zeroes(std.os.rlimit); + if (trace_) |trace| { + print_stacktrace: { + var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; + Output.disableBuffering(); + std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig(std.io.getStdErr())) catch break :print_stacktrace; + } + } + if (limit.cur > 0 and limit.cur < (8096 * 2)) { Output.prettyError( \\ @@ -527,11 +535,12 @@ pub noinline fn globalError(err: anyerror) noreturn { Output.flush(); - print_stacktrace: { - var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; - var trace = @errorReturnTrace() orelse break :print_stacktrace; - Output.disableBuffering(); - std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig(std.io.getStdErr())) catch break :print_stacktrace; + if (trace_) |trace| { + print_stacktrace: { + var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; + Output.disableBuffering(); + std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig(std.io.getStdErr())) catch break :print_stacktrace; + } } Global.exit(1); @@ -541,6 +550,15 @@ pub noinline fn globalError(err: anyerror) noreturn { "\n<r><red>error<r><d>:<r> <b>MissingPackageJSON<r>\nbun could not find a package.json file.\n", .{}, ); + + if (trace_) |trace| { + print_stacktrace: { + var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; + Output.disableBuffering(); + std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig(std.io.getStdErr())) catch break :print_stacktrace; + } + } + Global.exit(1); }, error.MissingValue => { @@ -550,12 +568,12 @@ pub noinline fn globalError(err: anyerror) noreturn { } Report.fatal(err, null); - - print_stacktrace: { - var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; - var trace = @errorReturnTrace() orelse break :print_stacktrace; - Output.disableBuffering(); - std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig(std.io.getStdErr())) catch break :print_stacktrace; + if (trace_) |trace| { + print_stacktrace: { + var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; + Output.disableBuffering(); + std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig(std.io.getStdErr())) catch break :print_stacktrace; + } } if (bun.auto_reload_on_crash) { |