#contextual #port

behold

一个简单的库,支持上下文调试

4个版本

使用旧的Rust 2015

0.1.3 2018年7月21日
0.1.2 2018年6月26日
0.1.1 2018年6月26日
0.1.0 2018年6月26日

#554 in 调试

MIT许可证

11KB
88

Build Status

Behold

一个简单的库,用于辅助上下文调试。这是Python Behold库的Rust部分移植。

文档

API文档可在此处找到。

变更日志可在此处找到。

核心概念

有时候打印调试是最好的检查运行程序状态的方法。但通常你只关心特定代码路径中的打印。使用Behold,程序的一部分可以控制另一部分的调试。

所有Behold实例共享相同的全局上下文来控制要打印的内容。然而,可以创建和配置Behold实例来决定如何或打印什么。

上下文调试

BEHOLD.show("testing".to_string()) 将将 "testing" 打印到屏幕上。BEHOLD.when(true).show("testing".to_string()) 将将 "testing" 打印到屏幕上。BEHOLD.when(false).show("testing".to_string()) 不会做任何事情。BEHOLD.when_context("key").show("testing".to_string()) 将将 "testing" 打印到屏幕上,但仅当 "testing" 键之前被设置为 true 时。

extern crate behold;

use behold::behold;

fn f(idx: usize) {
    behold().show(format!("Hello from f({})!", idx));
}

fn f2(idx: usize) {
    // Do something hard to debug
    behold().when(idx % 2 == 0).show(format!("Hello from f2({})!", idx));
}

fn f3(idx: usize) {
    // Do something hard to debug
    behold().when_context(format!("f3-{}", idx).as_str()).show(format!("Hello from f3({})!", idx));
}

fn main() {
    for i in 0..3 {
        println!("\n");
        f(i);
        f2(i);
        f3(i);
        // Context is global
        behold().set_context("f3-1", true);
    }
}

生成输出

Behold: Hello from f(0)!
Behold: Hello from f2(0)!


Behold: Hello from f(1)!
Behold: Hello from f3(1)!


Behold: Hello from f(2)!
Behold: Hello from f2(2)!

标记打印

每个 Behold 实例都可以配置一个标记来帮助区分输出。

extern crate behold;

use behold::behold;

fn main() {
    behold().tag("yolo").show("Hello world!".to_string());
}

生成输出

Hello world!, yolo

上下文执行

有时当某些上下文为真时执行一些调试任务(例如将状态保存到文件)很有用。

extern crate behold;

use behold::behold;

fn main() {
    behold().call(&|| { println!("Hello world!"); } );
}

将输出

"Hello world!"

而以下内容

extern crate behold;

use behold::behold;

fn main() {
    behold().when(false).call(&|| { println!("Hello world!"); } );
}

将不会输出任何内容。

依赖关系

~0–1.3MB
~17K SLoC