Rust开发提速技巧:dbg! 替代 println!,todo! 占位搭配 bacon 热重载

AI 概述
本文分享三项Rust高效开发技巧:dbg!宏可自动打印代码位置与数值,能嵌入表达式调试;todo!宏用于未完成代码占位、标记待实现逻辑;bacon工具实现代码改动自动编译运行,三者搭配可简化调试、优化开发流程。
目录
文章目录隐藏
  1. dbg! 比 println! 更适合调试
  2. 使用 todo! 宏占位
  3. 使用 bacon 进行热更新
  4. 结语

Rust 开发提速技巧:dbg! 替代 println!,todo! 占位搭配 bacon 热重载

在日常Rust 开发调试中,不少开发者习惯使用传统的 println!宏打印日志,存在操作繁琐、无法嵌入代码、信息展示单一等短板。本文分享三个高效实用的开发技巧,分别是调试专用 dbg!宏、代码占位 todo!宏,以及 bacon 热更新工具,帮助开发者简化调试流程、规范代码开发、省去重复编译操作。

dbg! 比 println! 更适合调试

很多新手开发者倾向于使用 println! 宏进行调试,但其实 Rust 提供了专门用于快速调试的输出宏 dbg!

fn main() {
    let x = 42;
    let y = 10;

    println!("x = {}", x);
    dbg!(x, y);
    dbg!(x + y * 2);
}

// Output:
// x = 42
// [src/main.rs:6:5] x = 42
// [src/main.rs:6:5] y = 10
// [src/main.rs:7:5] x + y * 2 = 62

从上面的示例可以看到,使用 println! 宏调试的时候需要手动写格式化字符串,而使用 dbg! 宏,则会自动打印表达式和值,还带文件名和行号。

除此之外,dbg! 宏还会返回传入表达式的值,这使得它可以无缝插入到现有代码中,不影响程序逻辑。

fn main() {
    let x = 10;
    let y = 20;

    let sum = dbg!(x) + dbg!(y);
    dbg!(sum);

    let sum = dbg!(calculate(x, y));
    dbg!(sum);
}

fn calculate(a: i32, b: i32) -> i32 {
    a + b
}

// Output:
// [src/main.rs:5:15] x = 10
// [src/main.rs:5:25] y = 20
// [src/main.rs:6:5] sum = 30
// [src/main.rs:8:15] calculate(x, y) = 30
// [src/main.rs:9:5] sum = 30

dbg! 宏不止可以直接嵌入表达式中,还可以嵌入函数调用当中,而这些是 println! 宏完全做不到的。非常的好用,反正我现在调试基本就是用 dbg! 宏了。

使用 todo! 宏占位

todo! 绝对是 Rust 标准库中最被低估且最实用的宏之一。在项目开发的早期时,让我们能专注于思考核心逻辑,而不被细节实现以及编辑器的报错打断。

fn calculate_tax(income: f64) -> f64 {
    todo!()
}

fn main() {
    let tax = calculate_tax(10000.0);
    dbg!(tax);
}

在上面的示例中,我们使用 todo! 宏进行占位,但是暂不实现的函数细节。

todo! 本质上是一个会触发 panic 的宏,所以当执行到它的时候就会抛出 panic。不过,todo! 宏有其明确的语义:这段代码尚未实现,后续需要补充

在实际使用时,我强烈建议携带上下文信息,如下所示:

fn calculate_tax(income: f64) -> f64 {
    todo!("执行步骤一 -> 步骤二 -> 步骤三")
}

同时它也支持式化字符串:

fn calculate_tax(income: f64) -> f64 {
    todo!("收入为:{},执行步骤一 -> 步骤二 -> 步骤三", income)
}

如果你使用的是 VSCode 编辑器,我强烈建议你装上 Todo Tree,这个插件可以检索到代码中的 todo! 宏,不过需要在其正则匹配的规则中添加上相应内容:

{
  "todo-tree.regex.regex": "(//|#|<!--|;|/\\*|^|^[ \\t]*(-|\\d+.))\\s*($TAGS)|todo!",
}

使用 bacon 进行热更新

为了避免每次修改代码之后,都需要重新手动编译一次。在实际开发过程中,热更新方案是不可或缺的,而 Rust 生态中最常用的热更新方案是 bacon

cargo install --locked bacon

安装完成后,我们需要到项目根目录中初始化 bacon 配置文件。

bacon --init

它会自动生成 bacon.toml 配置文件,我们需要在配置文件中配置任务。这次的示例中,我们会用到它默认提供的任务 run

首先,执行 bacon 命令启动服务。

使用 bacon 进行热更新

接下来,键入 Ctrl-j 打开任务列表,我们切换到 run 任务。

使用 bacon 进行热更新

当在终端中看到相关的打印时,意味着我们切换到 run 任务了。

使用 bacon 进行热更新

之后,我们每次修改代码并保存,bacon 都会监听并重新执行任务。

bacon 都会监听并重新执行任务

结语

dbg!、todo!宏与 bacon 热更新工具,是提升 Rust 开发效率的轻量化利器。dbg!简化调试输出且不干扰业务逻辑,todo!适配项目迭代占位开发,bacon 实现代码实时编译运行。熟练掌握这三项基础技巧,能够大幅减少重复操作、优化开发体验,让 Rust 项目开发与调试更加高效顺畅。

以上关于Rust开发提速技巧:dbg! 替代 println!,todo! 占位搭配 bacon 热重载的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

27

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Rust开发提速技巧:dbg! 替代 println!,todo! 占位搭配 bacon 热重载

发表回复