1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2015 年 8 月 3 日

#29#asm

BSD-3-Clause

7KB
81 代码行,不包括注释

breakpoint!()

Build Status

用法

添加到 Cargo.toml

[dependencies]
breakpoint = "0.1.0"

将宏导入您的包

#![feature(asm)]
#[macro_use] extern crate breakpoint;

设置断点!

breakpoint!();

根据条件设置断点!

breakpoint!(ref_count == 1);

文档

阅读文档!


lib.rs:

在您的编辑器中设置断点。

用法

breakpoint 包导入宏。不幸的是,宏 breakpoint!() 依赖于宏 asm!(),因此我们还需要 #![feature(asm)]

#![feature(asm)]
#[macro_use] extern crate breakpoint;

然后,在任何您希望调试器暂停的位置添加以下行

// Always pause.
breakpoint!();

// Only pause if `condition` is true.
breakpoint!(condition);

示例

想象我们有一个需要调试的非常棘手的函数,因为我们看到了整数下溢

fn tricky_function_must_be_debugged(val: usize) -> usize {
    val - 1
}

我们可以从编辑器中设置程序断点,重新构建,并在调试器下运行以查看错误发生的位置


fn tricky_function_must_be_debugged(val: usize) -> usize {
    // Set a breakpoint before the underflow, so we can debug!
    breakpoint!();
    val - 1
}

如果问题函数只被调用几次,恭喜!您现在已经发现了错误的根本原因!

然而,如果棘手的函数被多次调用,并且错误仅在多次调用后出现,那么仅在某些条件评估为真时断开连接很有用


fn tricky_function_must_be_debugged(val: usize) -> usize {
    // Only break if we are going to underflow!
    breakpoint!(val == 0);
    val - 1
}

为什么?

它很方便。尤其是当你已经在你的编辑器里时,你可能记不起你的调试器的条件断点咒语(通常因为当前调试器版本对 Rust 表达式解析支持不佳而变得更糟),而且你的包也不是超级大,所以重新构建很快。

特别是,我对失败的测试引发的恐慌没有自动暂停我的调试器感到厌烦,而且我从来记不起在恐慌时断开的咒语。大多数时候,我觉得这比那更容易。

诚然,breakpoint!() 远非完美。这些事情在动态语言中表现得更好,在动态语言中重新评估函数非常容易,而且不需要完整的重新编译。

无运行时依赖