This section documents features that define some aspects of the Rust runtime.
panic_handler attributeThe panic_handler attribute can only be applied to a function with signature fn(&PanicInfo) -> !. The function marked with this attribute defines the behavior of panics. The PanicInfo struct contains information about the location of the panic. There must be a single panic_handler function in the dependency graph of a binary, dylib or cdylib crate.
Below is shown a panic_handler function that logs the panic message and then halts the thread.
#![no_std]
use core::fmt::{self, Write};
use core::panic::PanicInfo;
struct Sink {
// ..
_0: (),
}
impl Sink {
fn new() -> Sink { Sink { _0: () }}
}
impl fmt::Write for Sink {
fn write_str(&mut self, _: &str) -> fmt::Result { Ok(()) }
}
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
let mut sink = Sink::new();
// logs "panicked at '$reason', src/main.rs:27:4" to some `sink`
let _ = writeln!(sink, "{}", info);
loop {}
}
The standard library provides an implementation of panic_handler that defaults to unwinding the stack but that can be changed to abort the process. The standard library's panic behavior can be modified at runtime with the set_hook function.
global_allocator attributeThe global_allocator attribute is used on a static item implementing the GlobalAlloc trait to set the global allocator.
windows_subsystem attributeThe windows_subsystem attribute may be applied at the crate level to set the subsystem when linking on a Windows target. It uses the MetaNameValueStr syntax to specify the subsystem with a value of either console or windows. This attribute is ignored on non-Windows targets, and for non-bin crate types.
#![allow(unused)]
#![windows_subsystem = "windows"]
fn main() {
}
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/reference/runtime.html