debug=1 和 debug=2 之间的区别

问题描述 投票:0回答:1

当我测试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 一些差异...)

rust rust-cargo
1个回答
0
投票

自从您询问以来,选项和文档似乎已经扩展。您的链接现在显示:

有效选项是:

  • 0
    false
    "none"
    :根本没有调试信息,默认为
    release
  • "line-directives-only"
    :仅限行信息指令。对于 nvptx* 目标,这可以进行分析。对于其他用例,
    line-tables-only
    是更好、更兼容的选择。
  • "line-tables-only"
    :仅限行表。为带有文件名/行号信息的回溯生成最少量的调试信息,但不生成其他任何信息,即没有变量或函数参数信息。
  • 1
    "limited"
    :没有类型或变量级别信息的调试信息。生成比
    line-tables-only
    更详细的模块级信息。
  • 2
    true
    "full"
    :完整调试信息,默认为 dev

因此,为了解决您的问题,听起来

1
"line-tables-only"
足以进行堆栈跟踪,并且转到
2
将添加调试器可以访问的类型和变量信息。

© www.soinside.com 2019 - 2024. All rights reserved.