diff options
| -rw-r--r-- | lib/std/builtin.zig | 6 | ||||
| -rw-r--r-- | lib/std/debug.zig | 8 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig index c772d8e6f9..430a29c9d7 100644 --- a/lib/std/builtin.zig +++ b/lib/std/builtin.zig @@ -869,8 +869,10 @@ pub noinline fn returnError(st: *StackTrace) void { } pub inline fn addErrRetTraceAddr(st: *StackTrace, addr: usize) void { - st.instruction_addresses[st.index & (st.instruction_addresses.len - 1)] = addr; - st.index +%= 1; + if (st.index < st.instruction_addresses.len) + st.instruction_addresses[st.index] = addr; + + st.index += 1; } const std = @import("std.zig"); diff --git a/lib/std/debug.zig b/lib/std/debug.zig index 93216f0058..21b05249a1 100644 --- a/lib/std/debug.zig +++ b/lib/std/debug.zig @@ -411,6 +411,14 @@ pub fn writeStackTrace( const return_address = stack_trace.instruction_addresses[frame_index]; try printSourceAtAddress(debug_info, out_stream, return_address - 1, tty_config); } + + if (stack_trace.index > stack_trace.instruction_addresses.len) { + const dropped_frames = stack_trace.index - stack_trace.instruction_addresses.len; + + tty_config.setColor(out_stream, .Bold); + try out_stream.print("({d} additional stack frames skipped...)\n", .{dropped_frames}); + tty_config.setColor(out_stream, .Reset); + } } pub const StackIterator = struct { |
