#panic #panic-handler #exit #abort #custom #proc-macro #custom-panic

nightly no-std panic-custom

Small panicking rust crate that allows to easily set the behavior of panicking for embedded or regular no_std binaries

2 releases

0.1.1 Mar 4, 2024
0.1.0 Mar 4, 2024

#1082 in Embedded development

MIT/Apache

10KB
69 lines

Panic Custom

Small crate for custom panicking behavior, primarily designed for embedded or no_std projects.

By default, its behavior for panics is to halt in both release and debug mode. This crate, panic_custom, allows developers to customize this behavior by providing a custom panic handler function.

Usage

The crate provides two main ways to define custom panicking behavior:

  • Using the define_panic! macro with a closure argument.
  • Using the #[define_panic] procedural macro.

Using define_panic! Macro

The define_panic! macro allows you to define custom panicking behavior by passing a closure as an argument.

use panic_custom::define_panic;

const MY_CUSTOM_CONSTANT: usize = 0;

define_panic!(|info| {
    let a = &MY_CUSTOM_CONSTANT;
    let b = MY_CUSTOM_CONSTANT;

    42 // The return type is not important
});

Using #[define_panic] Procedural Macro

The #[define_panic] procedural macro allows you to define a custom panic handler function. To use this macro, enable the proc_macros feature and include features = "proc_macros" in your Cargo.toml.

[dependencies]
panic_custom = { version = "0.1", features = ["proc_macros"] }
use panic_custom::define_panic;
use core::panic::PanicInfo;

#[define_panic]
fn my_panic(info: &PanicInfo) -> ! {
    loop {}
}

Features

  • proc_macros: Enables procedural macros for custom panic handling.

  • abort_on_debug: Sets the default behavior to abort on panic in debug mode. By default, the crate halts on panic in debug mode.

  • abort_on_release: Sets the default behavior to abort on panic in release mode. By default, the crate halts on panic in release mode.

Dependencies

~230KB