# [−] [src] Module cortex_m_quickstart::examples::_3_panic

Changing the panic handler

The easiest way to change the panic handler is to use a different panic handler crate.

    #![no_main]
    #![no_std]

    #[macro_use]
    extern crate cortex_m_rt as rt;

    // Pick one of these two panic handlers:

    // Reports panic messages to the host stderr using semihosting
    extern crate panic_semihosting;

    // Logs panic messages using the ITM (Instrumentation Trace Macrocell)
    // extern crate panic_itm;

    use rt::ExceptionFrame;

    entry!(main);

    fn main() -> ! {
        panic!("Oops")
    }

    // define the hard fault handler
    exception!(HardFault, hard_fault);

    fn hard_fault(ef: &ExceptionFrame) -> ! {
        panic!("HardFault at {:#?}", ef);
    }

    // define the default exception handler
    exception!(*, default_handler);

    fn default_handler(irqn: i16) {
        panic!("Unhandled exception (IRQn = {})", irqn);
    }

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)