当发生错误时,执行RUST_BACKTRACE=1 cargo run
会给出堆栈跟踪,如下所示。有没有办法得到文件&行号而不是十六进制地址?
thread '<main>' panicked at 'called `Result::unwrap()` on an `Err` value: Parsing: invalid encoding byte', /Users/rustbuild/src/rust-buildbot/slave/stable-dist-rustc-mac/build/src/libcore/result.rs:729
stack backtrace:
1: 0x104c9403f - sys::backtrace::write::h7807ec07859fb503t1r
2: 0x104c980e4 - panicking::on_panic::ha0ed2b9b562a7f9ctZv
3: 0x104c7c4d5 - rt::unwind::begin_unwind_inner::hbfb8d99cb52be7a1cHv
4: 0x104c7cd66 - rt::unwind::begin_unwind_fmt::hac7eda7c3f3b8498QFv
5: 0x104c979bc - rust_begin_unwind
6: 0x104cb75f5 - panicking::panic_fmt::h051633da0da2e362wwy
7: 0x104be0877 - result::Result<T, E>::unwrap::h15040486031244389916
8: 0x104bdc6f1 - main::h393644ca2d1fdb82uLa
9: 0x104c99e18 - rust_try_inner
10: 0x104c99e05 - rust_try
11: 0x104c988e8 - rt::lang_start::h5324dae87dacdac8YTv
12: 0x104be500e - main
An unknown error occurred
答案 0 :(得分:7)
有一个pull request合并到主要生锈仓库中,它会添加文件名和行号以进行回溯。据我所知,这是生锈1.0.0稳定释放的一部分。
您必须使用cargo profile启用回溯并构建可执行文件,其中包括调试符号到可执行文件(货物清单中带有import sys
if sys.version < (3, 0):
input_function = raw_input
else:
input_function = input
def tax_from_income(r):
if r > 800000:
return int((r - 800000)*.3)
elif r > 700000:
return int((r - 700000)*.25)
elif r > 600000:
return int((r - 600000)*.2)
elif r > 500000:
return int((r - 500000)*.1)
else:
return 0
def incometax():
nam = input("Please provide your name: ")
if nam in database1:
while True:
try:
r = float(input_function("Please provide your income details: "))
tax = tax_from_income(r)
if tax > 0:
return 'Rs.' + str(tax) + ' is your income tax'
else:
return 'You are exempt from Income tax'
except ValueError:
print("Please do not type in special character")
# while loop is continued here...
选项)。 AFAIK debug = true
现在默认使用调试配置文件。
以下是带有文件名和行号的示例跟踪输出:
cargo run
不幸的是,在某些平台上,例如MacOS X,它已被打破。在rust github问题跟踪器中有关于此的开放issue。
答案 1 :(得分:1)
如果你进入deps子目录并从那里运行程序,你现在将获得OSX中的行号。
这是由于这个未解决的问题很快就会解决: https://github.com/rust-lang/cargo/issues/4490