81 lines
2.1 KiB
Rust
81 lines
2.1 KiB
Rust
#![allow(dead_code)] // this is a developer's toolbox
|
|
|
|
use std::panic;
|
|
|
|
/// Export all of the ancillary tools from here as well.
|
|
pub use crate::utils::debug::*;
|
|
|
|
/// Log event at given level in debug-mode (when debug-assertions are enabled).
|
|
/// In release-mode it becomes DEBUG level, and possibly subject to elision.
|
|
///
|
|
/// Release-mode can be simulated in debug-mode builds by enabling the feature
|
|
/// 'dev_release_log_level'.
|
|
#[macro_export]
|
|
macro_rules! debug_event {
|
|
( $level:expr, $($x:tt)+ ) => {
|
|
if cfg!(debug_assertions) && cfg!(not(feature = "dev_release_log_level")) {
|
|
::tracing::event!( $level, $($x)+ );
|
|
} else {
|
|
::tracing::debug!( $($x)+ );
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Log message at the ERROR level in debug-mode (when debug-assertions are
|
|
/// enabled). In release-mode it becomes DEBUG level, and possibly subject to
|
|
/// elision.
|
|
#[macro_export]
|
|
macro_rules! debug_error {
|
|
( $($x:tt)+ ) => {
|
|
$crate::debug_event!(::tracing::Level::ERROR, $($x)+ );
|
|
}
|
|
}
|
|
|
|
/// Log message at the WARN level in debug-mode (when debug-assertions are
|
|
/// enabled). In release-mode it becomes DEBUG level, and possibly subject to
|
|
/// elision.
|
|
#[macro_export]
|
|
macro_rules! debug_warn {
|
|
( $($x:tt)+ ) => {
|
|
$crate::debug_event!(::tracing::Level::WARN, $($x)+ );
|
|
}
|
|
}
|
|
|
|
/// Log message at the INFO level in debug-mode (when debug-assertions are
|
|
/// enabled). In release-mode it becomes DEBUG level, and possibly subject to
|
|
/// elision.
|
|
#[macro_export]
|
|
macro_rules! debug_info {
|
|
( $($x:tt)+ ) => {
|
|
$crate::debug_event!(::tracing::Level::INFO, $($x)+ );
|
|
}
|
|
}
|
|
|
|
pub fn set_panic_trap() {
|
|
let next = panic::take_hook();
|
|
panic::set_hook(Box::new(move |info| {
|
|
panic_handler(info, &next);
|
|
}));
|
|
}
|
|
|
|
#[inline(always)]
|
|
#[allow(deprecated_in_future)]
|
|
fn panic_handler(info: &panic::PanicInfo<'_>, next: &dyn Fn(&panic::PanicInfo<'_>)) {
|
|
trap();
|
|
next(info);
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub fn trap() {
|
|
#[cfg(core_intrinsics)]
|
|
//SAFETY: embeds llvm intrinsic for hardware breakpoint
|
|
unsafe {
|
|
std::intrinsics::breakpoint();
|
|
}
|
|
|
|
#[cfg(all(not(core_intrinsics), target_arch = "x86_64"))]
|
|
//SAFETY: embeds instruction for hardware breakpoint
|
|
unsafe {
|
|
std::arch::asm!("int3");
|
|
}
|
|
}
|