#sentry #crash #minidump #process #capture #native #applications

sentry-rust-minidump

Captures native crashes as minidumps and sends to Sentry

19 releases

0.8.0 Jun 29, 2024
0.7.0 Feb 25, 2024
0.6.5 Jan 28, 2024
0.6.4 Jul 12, 2023
0.1.3 Jul 22, 2022

#173 in Debugging

Download history 524/week @ 2024-07-22 590/week @ 2024-07-29 567/week @ 2024-08-05 592/week @ 2024-08-12 360/week @ 2024-08-19 351/week @ 2024-08-26 223/week @ 2024-09-02 285/week @ 2024-09-09 285/week @ 2024-09-16 848/week @ 2024-09-23 792/week @ 2024-09-30 757/week @ 2024-10-07 834/week @ 2024-10-14 1052/week @ 2024-10-21 817/week @ 2024-10-28 1021/week @ 2024-11-04

3,769 downloads per month
Used in 2 crates

MIT/Apache

18KB
91 lines

sentry-rust-minidump

Master branch integration test status

Uses the minidumper-child crate to capture minidumps from a separate process and sends them to Sentry as attachments via the Sentry Rust SDK.

sentry_rust_minidump::init starts the current executable again with an argument that causes it to start in crash reporter mode. In this mode it waits for minidump notification from the main app process and handles writing and sending of the minidump file as an attachment to Sentry.

Everything before sentry_rust_minidump::init is called in both the main and crash reporter processes and should configure and start Sentry. Everything after sentry_rust_minidump::init is only called in the main process to run your application code.

[dependencies]
sentry = "0.34"
sentry-rust-minidump = "0.8"
fn main() {
    let client = sentry::init("__YOUR_DSN__");

    // Everything before here runs in both app and crash reporter processes
    let _guard = sentry_rust_minidump::init(&client);
    // Everything after here runs in only the app process

    App::run();

    // This will cause a minidump to be sent to Sentry 
    #[allow(deref_nullptr)]
    unsafe {
        *std::ptr::null_mut() = true;
    }
}

ipc feature

By default there is no scope synchronisation from the app process to the crash reporter process. This means that native crash event will be missing breadcrumbs, user, tags or extra added to the scope in the app.

When the ipc feature is enabled, you can send scope updates to the crash reporter process:

fn main() {
    let client = sentry::init("__YOUR_DSN__");

    // Everything before here runs in both app and crash reporter processes
    let crash_reporter = sentry_rust_minidump::init(&client).expect("crash reported didn't start");
    // Everything after here runs in only the app process

    crash_reporter.add_breadcrumb(...);
    crash_reporter.set_user(...);
    crash_reporter.set_extra(...);
    crash_reporter.set_tag(...);

    // Don't drop crash_reporter or the reporter process will close!
}

Dependencies

~9–19MB
~283K SLoC