forc-debug 0.71.0

Supports debugging Sway code via CLI and DAP server.
Documentation
use forc_debug::{ContractId, FuelClient, Transaction};

#[tokio::main]
async fn main() {
    run_example().await.expect("Running example failed");
}

async fn run_example() -> Result<(), anyhow::Error> {
    let client = FuelClient::new("http://localhost:4000/graphql")?;

    let session_id = client.start_session().await?;

    client
        .set_breakpoint(&session_id, ContractId::zeroed(), 0)
        .await?;

    let tx: Transaction =
        serde_json::from_str(include_str!("example_tx.json")).expect("Invalid transaction JSON");
    let status = client.start_tx(&session_id, &tx).await?;
    assert!(status.breakpoint.is_some());

    let value = client.register(&session_id, 12).await?;
    println!("reg[12] = {value}");

    let mem = client.memory(&session_id, 0x10, 0x20).await?;
    println!("mem[0x10..0x30] = {mem:?}");

    client.set_single_stepping(&session_id, true).await?;

    let status = client.continue_tx(&session_id).await?;
    assert!(status.breakpoint.is_some());

    client.set_single_stepping(&session_id, false).await?;

    let status = client.continue_tx(&session_id).await?;
    assert!(status.breakpoint.is_none());

    client.end_session(&session_id).await?;

    Ok(())
}