当我测试this时,我使用货物设置运行了一个测试程序:
[profile.release]
debug = 1
我得到了与
debug = 2
完全相同的堆栈跟踪:
$ RUST_BACKTRACE=1 cargo run --release
Finished release [optimized + debuginfo] target(s) in 0.02s
Running `target/release/an`
Error: param not big enough!
Stack backtrace:
0: an::bb
at ./src/main.rs:18:5
an::aa
at ./src/main.rs:13:2
an::main
at ./src/main.rs:6:2
1: core::ops::function::FnOnce::call_once
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/core/src/ops/function.rs:227:5
std::sys_common::backtrace::__rust_begin_short_backtrace
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/sys_common/backtrace.rs:123:18
2: std::rt::lang_start::{{closure}}
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/rt.rs:145:18
3: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/core/src/ops/function.rs:259:13
std::panicking::try::do_call
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/panicking.rs:406:40
std::panicking::try
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/panicking.rs:370:19
std::panic::catch_unwind
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/panic.rs:133:14
std::rt::lang_start_internal::{{closure}}
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/rt.rs:128:48
std::panicking::try::do_call
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/panicking.rs:406:40
std::panicking::try
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/panicking.rs:370:19
std::panic::catch_unwind
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/panic.rs:133:14
std::rt::lang_start_internal
at /rustc/02072b482a8b5357f7fb5e5637444ae30e423c40/library/std/src/rt.rs:128:20
4: main
5: __libc_start_main
6: _start
为什么?
doc 说:
有效选项是:
- 0 或 false:根本没有调试信息
- 1:仅线表
- 2 或 true:完整的调试信息
所以我预计堆栈跟踪中只会出现行号,并带有
debug = 1
。
(顺便说一句,使用
debug = 2
的二进制文件大小比使用 debug = 1
大得多,所以显然在某处存在 is 一些差异...)
自从您询问以来,选项和文档似乎已经扩展。您的链接现在显示:
有效选项是:
、0
或false
:根本没有调试信息,默认为"none"
release
:仅限行信息指令。对于 nvptx* 目标,这可以进行分析。对于其他用例,"line-directives-only"
是更好、更兼容的选择。line-tables-only
:仅限行表。为带有文件名/行号信息的回溯生成最少量的调试信息,但不生成其他任何信息,即没有变量或函数参数信息。"line-tables-only"
或1
:没有类型或变量级别信息的调试信息。生成比"limited"
更详细的模块级信息。line-tables-only
、2
或true
:完整调试信息,默认为 dev"full"
因此,为了解决您的问题,听起来
1
或 "line-tables-only"
足以进行堆栈跟踪,并且转到 2
将添加调试器可以访问的类型和变量信息。