#[panic_handler]
#[panic_handler] is used to define the behavior of panic! in #![no_std] applications.
The #[panic_handler] attribute must be applied to a function with signature fn(&PanicInfo) -> ! and such function must appear once in the dependency graph of a binary / dylib / cdylib
crate. The API of PanicInfo can be found in the API docs.
Given that #![no_std] applications have no standard output and that some #![no_std]
applications, e.g. embedded applications, need different panicking behaviors for development and for
release it can be helpful to have panic crates, crate that only contain a #[panic_handler].
This way applications can easily swap the panicking behavior by simply linking to a different panic
crate.
Below is shown an example where an application has a different panicking behavior depending on
whether is compiled using the dev profile (cargo build) or using the release profile (cargo build --release).
panic-semihosting crate -- log panic messages to the host stderr using semihosting:
use ;
use PanicInfo;
#
#
#
#
!
panic-halt crate -- halt the thread on panic; messages are discarded:
use PanicInfo;
!
app crate:
// dev profile
extern crate panic_semihosting;
// release profile
extern crate panic_halt;