use std::{fmt::Write, panic::PanicHookInfo};
use vexide_core::backtrace::BacktraceIter;
use crate::error_report::ErrorReport;
pub(crate) fn hook(info: &PanicHookInfo<'_>) {
let mut dialog = ErrorReport::begin();
eprintln!("{info}");
writeln!(dialog, "{info}").unwrap();
if cfg!(target_os = "vexos") {
let mut i = 0;
eprintln!("stack backtrace:");
_ = writeln!(dialog, "stack backtrace (check terminal):");
BacktraceIter::capture(|backtrace| {
for addr in backtrace {
dialog.write_backtrace(i, addr as u32);
eprintln!("{i:>3}: 0x{:x}", addr as u32);
i += 1;
}
});
dialog.finish_backtrace(i);
eprintln!(
"note: Use a symbolizer to convert stack frames to human-readable function names."
);
}
loop {
unsafe {
vex_sdk::vexTasksRun();
}
}
}