authorgravatar for mason@gamesbymason.comMason Remaley <mason@gamesbymason.com> 2026-04-11 18:20:26-07:00
committergravatar for mason@gamesbymason.comMason Remaley <mason@gamesbymason.com> 2026-04-12 04:01:30-07:00
log87fb7df25794d12b2316dd41a9111e2206c00152
tree47a897f98b92f7e07a0af13b4dc8e90b1ab53a2f
parentac207073f3426e615e7d4735994f73f67af7ee8e

Updates stack trace vs error return trace in more places


4 files changed, 8 insertions(+), 6 deletions(-)

doc/langref.html.in+1-1
...@@ -3263,7 +3263,7 @@ fn createFoo(param: i32) !Foo {...@@ -3263,7 +3263,7 @@ fn createFoo(param: i32) !Foo {
3263 <ul>3263 <ul>
3264 <li>Return an error from main</li>3264 <li>Return an error from main</li>
3265 <li>An error makes its way to {#syntax#}catch unreachable{#endsyntax#} and you have not overridden the default panic handler</li>3265 <li>An error makes its way to {#syntax#}catch unreachable{#endsyntax#} and you have not overridden the default panic handler</li>
3266 <li>Use {#link|errorReturnTrace#} to access the current return trace. You can use {#syntax#}std.debug.dumpStackTrace{#endsyntax#} to print it. This function returns comptime-known {#link|null#} when building without error return tracing support.</li>3266 <li>Use {#link|errorReturnTrace#} to access the current return trace. You can use {#syntax#}std.debug.dumpErrorReturnTrace{#endsyntax#} to print it. This function returns comptime-known {#link|null#} when building without error return tracing support.</li>
3267 </ul>3267 </ul>
3268 {#header_open|Implementation Details#}3268 {#header_open|Implementation Details#}
3269 <p>3269 <p>
lib/compiler/test_runner.zig+3-3
...@@ -144,7 +144,7 @@ fn mainServer(init: std.process.Init.Minimal) !void {...@@ -144,7 +144,7 @@ fn mainServer(init: std.process.Init.Minimal) !void {
144 error.SkipZigTest => .skip,144 error.SkipZigTest => .skip,
145 else => s: {145 else => s: {
146 if (@errorReturnTrace()) |trace| {146 if (@errorReturnTrace()) |trace| {
147 std.debug.dumpStackTrace(trace);147 std.debug.dumpErrorReturnTrace(trace);
148 }148 }
149 break :s .fail;149 break :s .fail;
150 },150 },
...@@ -312,7 +312,7 @@ fn mainTerminal(init: std.process.Init.Minimal) void {...@@ -312,7 +312,7 @@ fn mainTerminal(init: std.process.Init.Minimal) void {
312 std.debug.print("FAIL ({t})\n", .{err});312 std.debug.print("FAIL ({t})\n", .{err});
313 }313 }
314 if (@errorReturnTrace()) |trace| {314 if (@errorReturnTrace()) |trace| {
315 std.debug.dumpStackTrace(trace);315 std.debug.dumpErrorReturnTrace(trace);
316 }316 }
317 test_node.end();317 test_node.end();
318 },318 },
...@@ -438,7 +438,7 @@ var fuzz_runner: if (builtin.fuzz) struct {...@@ -438,7 +438,7 @@ var fuzz_runner: if (builtin.fuzz) struct {
438 error.SkipZigTest => return,438 error.SkipZigTest => return,
439 else => {439 else => {
440 if (@errorReturnTrace()) |trace| {440 if (@errorReturnTrace()) |trace| {
441 std.debug.dumpStackTrace(trace);441 std.debug.dumpErrorReturnTrace(trace);
442 }442 }
443 std.debug.print("failed with error.{t}\n", .{err});443 std.debug.print("failed with error.{t}\n", .{err});
444 std.process.exit(1);444 std.process.exit(1);
lib/std/Thread.zig+2-2
...@@ -442,7 +442,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) {...@@ -442,7 +442,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
442 @call(.auto, f, args) catch |err| {442 @call(.auto, f, args) catch |err| {
443 std.debug.print("error: {s}\n", .{@errorName(err)});443 std.debug.print("error: {s}\n", .{@errorName(err)});
444 if (@errorReturnTrace()) |trace| {444 if (@errorReturnTrace()) |trace| {
445 std.debug.dumpStackTrace(trace);445 std.debug.dumpErrorReturnTrace(trace);
446 }446 }
447 };447 };
448448
...@@ -932,7 +932,7 @@ const WasiThreadImpl = struct {...@@ -932,7 +932,7 @@ const WasiThreadImpl = struct {
932 @call(.auto, f, w.args) catch |err| {932 @call(.auto, f, w.args) catch |err| {
933 std.debug.print("error: {s}\n", .{@errorName(err)});933 std.debug.print("error: {s}\n", .{@errorName(err)});
934 if (@errorReturnTrace()) |trace| {934 if (@errorReturnTrace()) |trace| {
935 std.debug.dumpStackTrace(trace);935 std.debug.dumpErrorReturnTrace(trace);
936 }936 }
937 };937 };
938 },938 },
lib/std/std.zig+2
...@@ -165,6 +165,8 @@ pub const Options = struct {...@@ -165,6 +165,8 @@ pub const Options = struct {
165 /// * `debug.dumpCurrentStackTrace`165 /// * `debug.dumpCurrentStackTrace`
166 /// * `debug.writeStackTrace`166 /// * `debug.writeStackTrace`
167 /// * `debug.dumpStackTrace`167 /// * `debug.dumpStackTrace`
168 /// * `debug.writeErrorReturnTrace`
169 /// * `debug.dumpErrorReturnTrace`
168 ///170 ///
169 /// Stack traces can generally be collected and printed when debug info is stripped, but are171 /// Stack traces can generally be collected and printed when debug info is stripped, but are
170 /// often less useful since they usually cannot be mapped to source locations and/or have bad172 /// often less useful since they usually cannot be mapped to source locations and/or have bad