Add panic logging
This commit is contained in:
parent
08f086bfc4
commit
ca5361cc58
|
@ -4,6 +4,7 @@ description = "A re-implementation of Cave Story (Doukutsu Monogatari) engine"
|
||||||
version = "0.101.0"
|
version = "0.101.0"
|
||||||
authors = ["Alula", "dawnDus"]
|
authors = ["Alula", "dawnDus"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
rust-version = "1.65"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
crate-type = ["lib"]
|
crate-type = ["lib"]
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
use std::backtrace::Backtrace;
|
||||||
use std::cell::UnsafeCell;
|
use std::cell::UnsafeCell;
|
||||||
|
use std::panic::PanicInfo;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
@ -290,14 +292,27 @@ fn init_logger() -> GameResult {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn panic_hook(info: &PanicInfo<'_>) {
|
||||||
|
let backtrace = Backtrace::force_capture();
|
||||||
|
let msg = info.payload().downcast_ref::<&str>().unwrap_or(&"");
|
||||||
|
let location = info.location();
|
||||||
|
|
||||||
|
if location.is_some() {
|
||||||
|
log::error!("Panic occurred in {} with message: '{msg}'\n {backtrace:#}", location.unwrap().to_string());
|
||||||
|
} else {
|
||||||
|
log::error!("Panic occurred with message: '{msg}'\n {backtrace:#}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn init(options: LaunchOptions) -> GameResult {
|
pub fn init(options: LaunchOptions) -> GameResult {
|
||||||
let _ = init_logger();
|
let _ = init_logger();
|
||||||
|
std::panic::set_hook(Box::new(panic_hook));
|
||||||
|
|
||||||
let mut context = Box::pin(Context::new());
|
let mut context = Box::pin(Context::new());
|
||||||
|
|
||||||
let mut fs_container = FilesystemContainer::new();
|
let mut fs_container = FilesystemContainer::new();
|
||||||
fs_container.mount_fs(&mut context)?;
|
fs_container.mount_fs(&mut context)?;
|
||||||
|
|
||||||
if options.server_mode {
|
if options.server_mode {
|
||||||
log::info!("Running in server mode...");
|
log::info!("Running in server mode...");
|
||||||
context.headless = true;
|
context.headless = true;
|
||||||
|
|
Loading…
Reference in New Issue