mirror of
https://codeberg.org/icewind/tf-log-parser.git
synced 2026-06-03 18:24:09 +02:00
print what file we paniced on
This commit is contained in:
parent
7b1ff4bd72
commit
6637e466ab
1 changed files with 28 additions and 9 deletions
|
|
@ -5,6 +5,7 @@ use std::env::args;
|
|||
use std::ffi::OsStr;
|
||||
use std::fs;
|
||||
use std::hint::black_box;
|
||||
use std::mem::forget;
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
use std::time::{Duration, Instant};
|
||||
use tf_log_parser::parse;
|
||||
|
|
@ -66,6 +67,8 @@ fn main() -> Result<(), MainError> {
|
|||
|
||||
read_time.fetch_add(read_start.elapsed().as_micros() as usize, Ordering::Relaxed);
|
||||
let parse_start = Instant::now();
|
||||
on_panic(
|
||||
|| {
|
||||
let (output, _) = match parse(&input) {
|
||||
Ok(val) => val,
|
||||
Err(e) => {
|
||||
|
|
@ -73,14 +76,16 @@ fn main() -> Result<(), MainError> {
|
|||
return;
|
||||
}
|
||||
};
|
||||
black_box(output);
|
||||
},
|
||||
|| eprintln!("Paniced on {}", path.display()),
|
||||
);
|
||||
|
||||
parse_time.fetch_add(
|
||||
parse_start.elapsed().as_micros() as usize,
|
||||
Ordering::Relaxed,
|
||||
);
|
||||
count.fetch_add(1, Ordering::Relaxed);
|
||||
black_box(output);
|
||||
// let _ = println!("{} messages", output.chat.len());
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -103,3 +108,17 @@ fn main() -> Result<(), MainError> {
|
|||
fn micros_as_sec(micros: usize) -> f32 {
|
||||
micros as f32 / 1_000_000.0
|
||||
}
|
||||
|
||||
struct PanicCanary<F: Fn() -> ()>(F);
|
||||
|
||||
impl<F: Fn() -> ()> Drop for PanicCanary<F> {
|
||||
fn drop(&mut self) {
|
||||
(self.0)()
|
||||
}
|
||||
}
|
||||
|
||||
fn on_panic<F: Fn() -> (), P: Fn() -> ()>(f: F, panic: P) {
|
||||
let canary = PanicCanary(panic);
|
||||
f();
|
||||
forget(canary)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue