Rust从入门到实战系列三百零五:详细的栈调用信息

本文介绍了Rust编程语言中panic时的默认栈展开机制,以及如何在Cargo.toml中配置为在release模式下使用直接终止。作者强调了栈展开提供详细错误信息的优点和直接终止关注代码大小的场景。
摘要由CSDN通过智能技术生成

默认情况下,栈调用只会展示最基本的信息:
thread ‘main’ panicked at ‘index out of bounds: the len is 3 but the index is 99’,
src/main.rs:4:5
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
但是有时候,我们还希望获取更详细的信息:
3. 🌟

填空以打印全部的调用栈

提示: 你可以在之前的默认 panic 信息中找到相关线索

$ __ cargo run
thread ‘main’ panicked at ‘assertion failed: (left == right)
left: [97, 98, 99],
right: [96, 97, 98]’, src/main.rs:3:5
stack backtrace:
0: rust_begin_unwind
at
/rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:498:5
1: core::panicking::panic_fmt
at
/rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/panicking.rs:116:14
2: core::panicking::assert_failed_inner
3: core::panicking::assert_failed
at
/rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/panicking.rs:154:5
4: study_cargo::main
at ./src/main.rs:3:5
5: core::ops::function::FnOnce::call_once
at
/rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with RUST_BACKTRACE=full for a verbose backtrace.
unwinding 和 abort
当出现 panic! 时,程序提供了两种方式来处理终止流程:栈展开和直接终止。
其中,默认的方式就是 栈展开 ,这意味着 Rust 会回溯栈上数据和函数调用,因此也意味着更多的善后工
作,好处是可以给出充分的报错信息和栈调用信息,便于事后的问题复盘。 直接终止 ,顾名思义,不清理
数据就直接退出程序,善后工作交与操作系统来负责。
对于绝大多数用户,使用默认选择是最好的,但是当你关心最终编译出的二进制可执行文件大小时,那么
可以尝试去使用直接终止的方式,例如下面的配置修改 Cargo.toml 文件,实现在 release 模式下遇到
panic 直接终止:
[profile.release]
panic = ‘abort’

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值