miden-debug 0.8.0

An interactive debugger for Miden VM programs
Documentation
use std::sync::Arc;

use miden_assembly::{Assembler, DefaultSourceManager, SourceManager};
use miden_debug::{Executor, flamegraph::FlamegraphProfile};

#[test]
fn flamegraph_profile_can_be_collected_from_debug_executor() {
    let source_manager: Arc<dyn SourceManager> = Arc::new(DefaultSourceManager::default());
    let source = r#"
begin
    push.1
    push.2
    add
    push.10
    mul
    swap
    drop
end
"#;

    let program = Assembler::new(source_manager.clone()).assemble_program(source).unwrap();
    let mut debug_executor = Executor::new(vec![]).into_debug(&program, source_manager);

    let profile =
        FlamegraphProfile::collect(&mut debug_executor).expect("program execution failed");

    assert!(debug_executor.stopped);
    assert!(profile.total_cycles() > 0);
    assert!(!profile.samples().is_empty());
    assert_eq!(profile.samples().values().sum::<usize>(), profile.total_cycles());
}