#debug-information #print #time #benefits #macro

develop_debug

Print debugging information at development time

11 releases (6 breaking)

0.6.1 Nov 19, 2021
0.6.0 Nov 17, 2021
0.5.0 Nov 14, 2021
0.4.1 May 19, 2021
0.0.0 Mar 27, 2021

#557 in Debugging

MPL-2.0 license

14KB
167 lines

Print debugging information at development time

What does this library do?

  • Print nice debugging information;
  • Does not affect performance in the release version;

Usage

Add this to your Cargo.toml :

[dependencies]
develop_debug = "0.6.1"

Use the develop_debug! :

use std::collections::HashMap;

use develop_debug::*;

// Standard usage
#[test]
fn test_develop_debug() {
    let x = "dear X";
    let say = "hello world!";
    let vec = vec!["a", "b", "c"];
    let map = HashMap::from([("a", (Some("a"), "a")), ("b", (Some("b"), "b"))]);
    let title2 = "balabala...";

    develop_debug!(output method);
    develop_debug!(title "example {}",title2);
    develop_debug!(step "do something...{}", say);
    develop_debug!(vars x,say,vec,map);
    develop_debug!(done "genius {}",x);
    develop_debug!(error "dude, this road is blocked. {}",x);
    develop_debug!(
        "{}",
        "Use it just as you would with the `println!()` macro."
    );
}

// Using the shortcut, print the same result as above.
#[test]
fn test_develop_debug_shortcut() {
    let x = "dear X";
    let say = "hello world!";
    let vec = vec!["a", "b", "c"];
    let map = HashMap::from([("a", (Some("a"), "a")), ("b", (Some("b"), "b"))]);
    let title2 = "balabala...";

    dd____show!();
    dd___title!("example {}", title2);
    dd____step!("do something...{}", say);
    dd____vars!(x, say, vec, map);
    dd____done!("genius {}", x);
    dd___error!("dude, this road is blocked. {}", x);
    dd________!(
        "{}",
        "Use it just as you would with the `println!()` macro."
    );
}

#[test]
fn test_output_range_control() {
    dd____show!(); // Output only messages for the current method
    dd____step!("current method 1 .."); // output
    other(); // ignored
    dd____show!(global); // Outputs all messages for all methods
    dd____step!("current method 2 .."); // output
    other(); // output
    dd____hide!(global);
}

fn other() {
    dd____step!("other method");     
}

Output in debug mode :

 tests/how_to_use.rs:36 ❳  🍀  example balabala...

 tests/how_to_use.rs:37 ❳  🦀  do something...hello world!

 tests/how_to_use.rs:38 ❳  🔹  ‹ x          › = "dear X"
 tests/how_to_use.rs:38 ❳  🔹  ‹ say        › = "hello world!"
 tests/how_to_use.rs:38 ❳  🔹  ‹ vec        › = [
                                                     "a",
                                                     "b",
                                                     "c",
                                                 ]
 tests/how_to_use.rs:38 ❳  🔹  ‹ map        › = {"b": (
                                                 ›        Some(
                                                 ›            "b",
                                                 ›        ),"b",
                                                 ›    ),"a": (
                                                 ›        Some(
                                                 ›            "a",
                                                 ›        ),"a",
                                                 ›    ),
                                                 }

 tests/how_to_use.rs:39 ❳  🌱  done. genius dear X


 tests/how_to_use.rs:40 ❳  💥  error. dude, this road is blocked. dear X


 tests/how_to_use.rs:41 ❳  🐰  Use it just as you would with the `println!()` macro.

# output_range_control

🦀  current method 1 ..

🦀  current method 2 ..

🦀  other method

No output in --release mode.

What are the benefits of develop_debug! shortcut?

😬 I think it's easy to recognize in the source code ;
🤤 I think it's convenient to prompt in VS Code ;
🤓 I think it visually splits up the code ;

Does the develop_debug! macro affect code performance?

  • It doesn't affect code performance at all;
  • When compiled to the release, develop_debug! actually expanded to empty;

If the document is not semantically fluent

🥺, please forgive my lack of English. All the documents are explained by the translation software; If you can provide a better translation, please contact me at code@autodo.xyz;

I hope this simple library is of some help to you.

😌 😌 😌 😌 😌 😌

No runtime deps