Crate panic_custom

source ·
Expand description

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

By default, it’s 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.

§Note

Ensure that custom panic handlers are implemented safely to avoid undefined behavior. Incorrect panic handling logic may lead to unexpected program behavior.

§See Also

§Reference

This crate provides flexibility in defining custom panic handling behavior, empowering developers to tailor their applications’ panic behavior to their specific requirements, especially in embedded or no_std projects.

Attribute Macros§

  • define_panicproc_macros
    Defines the given function as a panic handler.