aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-14 23:08:29 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-14 23:08:29 -0700
commit81e11ae58663d07b960c9da4d36f378d09bfbfdb (patch)
tree13b1e421edf040cae647995f1079d19853831568
parent0d248568f6777cbc675b16415873b322b1b20abc (diff)
downloadbun-81e11ae58663d07b960c9da4d36f378d09bfbfdb.tar.gz
bun-81e11ae58663d07b960c9da4d36f378d09bfbfdb.tar.zst
bun-81e11ae58663d07b960c9da4d36f378d09bfbfdb.zip
Include the error return trace
-rw-r--r--src/report.zig42
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) {