2015-05-28 5 views
12

Выполнение 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

Какой платформы вы? Я думал, что Linux имеет имена файлов и номера строк. – Shepmaster

+5

@Shepmaster: только для отладочных сборников, а не для релизов. –

+1

@Shepmaster I, использующий OS X 10.10 –

ответ

6

Существует pull request объединен в основную ржавчине репо, который добавляет имена файлов и номера строк в трассировку. Насколько я вижу, это было частью стабильной версии ржавчины 1.0.0.

Вы должны включить backtraces и построить исполняемый файл, используя cargo profile, который включает в себя символы отладки в исполняемый файл (с опцией в грузовом манифесте). AFAIK cargo run по умолчанию использует профиль отладки.

Вот пример вывода трассировки с именами файлов и номера строк:

[[email protected] ~/workspace/mqtt-rust $ RUST_BACKTRACE=1 cargo run 
    Compiling mqtt v0.1.0 (file:///home/user/workspace/mqtt-rust) 

    Running `target/debug/mqtt` 
thread '<main>' panicked at 'I want line numbers!', src/proto/client.rs:33 
stack backtrace: 
    1:  0x7ff049fa47d9 - sys::backtrace::tracing::imp::write::he18882fa84e6b00ePnt 
    2:  0x7ff049fa39b8 - panicking::on_panic::h495226a97f084523enx 
    3:  0x7ff049f9dcce - sys_common::unwind::begin_unwind_inner::h7a4ee06c0d57e26affs 
    4:  0x7ff049f95f47 - sys_common::unwind::begin_unwind::h13029855766851973181 
         at ../src/libstd/sys/common/unwind/mod.rs:232 
    5:  0x7ff049f95e8a - proto::client::MqttConnection::connect::h633d3d42c15a3dedgYa 
         at /home/user/workspace/mqtt-rust/<std macros>:3 
    6:  0x7ff049f80416 - main::h1d77c75265710f92gaa 
         at src/main.rs:5 
    7:  0x7ff049fa6084 - sys_common::unwind::try::try_fn::h4848098439110500489 
    8:  0x7ff049fa3098 - __rust_try 
    9:  0x7ff049fa5cf8 - rt::lang_start::hcf64c98c1a7c0031Zkx 
    10:  0x7ff049f834f6 - main 
    11:  0x7ff049170ec4 - __libc_start_main 
    12:  0x7ff049f802a8 - <unknown> 
    13:    0x0 - <unknown> 
An unknown error occurred 

К сожалению, это не работает на некоторых платформах, таких как MacOS X. Существует открытая issue об этом в ржавчину GitHub отслеживания проблем.

+0

@Shepmaster pull request заявляет, что он работает на любой ОС Android, отличной от Android, - не знаю, включает ли это MacOS X –

+2

. Я могу указать, что с Rust 1.5 обратные трассировки не имеют номеров строк в OS X. Я не см. их^_^ – Shepmaster

+0

В OS X 10.11 с использованием Rust 1.5 я все еще не вижу номера строк –

1

Если вы заходите в подкаталог deps и запускаете программу оттуда, вы теперь получите номера строк в OSX.

Это связанно с этим открытым вопросом, который, надеюсь, будет исправлено в ближайшее время: https://github.com/rust-lang/cargo/issues/4490