#trace #stack-trace

debugtrace

Enables backtraces to be attached to values in debug and test builds without incurring a cost in release or bench builds

1 unstable release

Uses old Rust 2015

0.1.0 Mar 2, 2016

#292 in Profiling

Download history 207/week @ 2023-12-03 308/week @ 2023-12-10 299/week @ 2023-12-17 242/week @ 2023-12-24 234/week @ 2023-12-31 250/week @ 2024-01-07 237/week @ 2024-01-14 242/week @ 2024-01-21 313/week @ 2024-01-28 321/week @ 2024-02-04 393/week @ 2024-02-11 653/week @ 2024-02-18 475/week @ 2024-02-25 572/week @ 2024-03-03 617/week @ 2024-03-10 752/week @ 2024-03-17

2,431 downloads per month
Used in 23 crates (2 directly)

MIT license

13KB
170 lines

Debugtrace

Documentation

This crate enables backtraces to be attached to values in debug and test builds without incurring a cost in release or bench builds.

It uses the selected build-profile to determine if backtraces should be collected. On debug and test backtraces are collected and will be printed if the value is printed using fmt::Debug ({:?}). In release and bench profiles Trace will only be a newtype wrapper making it zero-overhead.

Note that this crate operates under the same restrictions that backtrace does which means that file and line-number information is not always available.

Installation

[dependencies]
debugtrace = "0.1.0"

Usage

extern crate debugtrace;

use debugtrace::Trace;

fn foo() -> Trace<u32> {
    Trace::new(123)
}

fn main () {
    let e = foo();

    println!("{:?}", e);
}

This will output something like the following when built with debug or test profiles:

123 at
   0       0x104f888d8 - foo::h83f9455bde0e24228Oe (src/main.rs:6)
   1       0x104f8978b - main::hd70e3ccce038deb2gPe (src/main.rs:10)
   2       0x104f9c312 - sys_common::unwind::try::try_fn::h4103587514840227558 (<unknown>:<unknown>)
   3       0x104f9ab48 - __rust_try (<unknown>:<unknown>)
   4       0x104f9c1b9 - rt::lang_start::h216753457f385fdaJCx (<unknown>:<unknown>)
   5       0x104f8fb69 - main (<unknown>:<unknown>)

When built using release or bench profiles it will not collect any backtrace and will only output:

123

Features

  • backtrace:

    This will force backtraces to be collected no matter what profile is used. It also includes the Trace::resolve() method to programmatically obtain the stacktrace.

Dependencies

~330KB