#stack-overflow #backtrace #printing

backtrace-on-stack-overflow

Best effort backtrace printing

4 releases (2 breaking)

0.3.0 Jan 24, 2023
0.2.0 Jul 1, 2022
0.1.1 Nov 4, 2020
0.1.0 Nov 4, 2020

#486 in Debugging

Download history 2054/week @ 2024-08-18 1040/week @ 2024-08-25 2345/week @ 2024-09-01 2264/week @ 2024-09-08 3082/week @ 2024-09-15 2317/week @ 2024-09-22 2373/week @ 2024-09-29 962/week @ 2024-10-06 2350/week @ 2024-10-13 2997/week @ 2024-10-20 2664/week @ 2024-10-27 2910/week @ 2024-11-03 7143/week @ 2024-11-10 3531/week @ 2024-11-17 3688/week @ 2024-11-24 2936/week @ 2024-12-01

17,316 downloads per month
Used in 14 crates (5 directly)

MIT/Apache

8KB

backtrace-on-stack-overflow

By default, Rust aborts on stackoverflow without printing a backtrace:

λ bat src/main.rs
fn main() {
    f(92)
}

fn f(x: u64) {
    f(x)
}
λ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/so`

thread 'main' has overflowed its stack
fatal runtime error: stack overflow
fish: Job 1, 'cargo run' terminated by signal SIGABRT (Abort)

This crate fixes this:

λ bat src/main.rs
fn main() {
    unsafe { backtrace_on_stack_overflow::enable() };
    f(92)
}

fn f(x: u64) {
    f(x)
}
λ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/so`
Stack Overflow:
   0: backtrace_on_stack_overflow::handle_sigsegv
             at /home/matklad/p/backtrace-on-stack-overflow/src/lib.rs:33:40
   1: <unknown>
   2: so::f
             at src/main.rs:6
   3: so::f
             at src/main.rs:7:5
   4: so::f
             at src/main.rs:7:5
   5: so::f
             at src/main.rs:7:5
   6: so::f
             at src/main.rs:7:5
   7: so::f
             at src/main.rs:7:5
   8: so::f
             at src/main.rs:7:5
   9: so::f
             at src/main.rs:7:5
  10: so::f
             at src/main.rs:7:5

This crate works for debugging, but is unsuited for being enabled in production.

Dependencies

~4–9MB
~102K SLoC