example/
example.rs

1use std::{
2    alloc::System,
3    sync::mpsc,
4    time::{Duration, Instant},
5};
6
7use alloc_track::{AllocTrack, BacktraceMode};
8
9#[global_allocator]
10static GLOBAL_ALLOC: AllocTrack<System> = AllocTrack::new(System, BacktraceMode::Short);
11
12fn main() {
13    let (sender, receiver) = mpsc::channel();
14    std::thread::Builder::new()
15        .name("thread2".to_string())
16        .spawn(move || thread(receiver))
17        .unwrap();
18
19    let mut last_print = Instant::now();
20    loop {
21        let buf = vec![1u8; 1024];
22        sender.send(buf).ok();
23        std::thread::sleep(Duration::from_millis(100));
24        if last_print.elapsed() > Duration::from_secs(10) {
25            last_print = Instant::now();
26            let report = alloc_track::backtrace_report(|_, _| true);
27            println!("BACKTRACES\n{report}");
28            println!("BACKTRACES CSV\n{}", report.csv());
29            let report = alloc_track::thread_report();
30            println!("THREADS\n{report}");
31        }
32    }
33}
34
35fn thread(receiver: mpsc::Receiver<Vec<u8>>) {
36    let mut flip = false;
37    while let Ok(block) = receiver.recv() {
38        if flip {
39            drop(block);
40        } else {
41            std::mem::forget(block);
42        }
43        flip = !flip;
44    }
45}