Rustでエラーがでたときに下のように「注意: バックトレースを表示するために環境変数RUST_BACKTRACE=1
をつけて実行しろよ」ってメッセージがでる。
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
# 注意: バックトレースを表示するために環境変数`RUST_BACKTRACE=1`をつけて実行しろよ
いくつかの環境でRUST_BACKTRACE=1
を設定するコマンドを載せます。
以下は実行したプロセス内だけ有効な設定方法です。 環境変数を永続化する方法は検索してください。
Contents
Windows コマンドプロンプト
set RUST_BACKTRACE=1
Windows パワーシェル
$env:RUST_BACKTRACE=1
Mac OS X
export RUST_BACKTRACE=1
Linux
RUST_BACKTRACE=1
# 表示
echo $RUST_BACKTRACE
# 削除
unset RUST_BACKTRACE
# 環境変数を使いつつ実行する
env RUST_BACKTRACE=1 cargo run
バックトレースの例
Windows PowerShellで実行した例です。
> cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.16s
Running `target\debug\opengl.exe`
OK: init OpenGL: version=3.1
thread 'main' panicked at 'failed to open file: rsc/shader/shader.vs', src\shader.rs:29:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\opengl.exe` (exit code: 101)
「注意: バックトレースを表示するために環境変数RUST_BACKTRACE=1
をつけて実行しろよ」ってメッセージ。
その手前の行でエラーが起きた行とエラー内容がわかるが、バックトレースをつけてもう一度実行する。
RUST_BACKTRACE=1
RUST_BACKTRACE=1
をつけて実行する。
> $env:RUST_BACKTRACE=1
> cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.15s
Running `target\debug\opengl.exe`
OK: init OpenGL: version=3.1
thread 'main' panicked at 'failed to open file: rsc/shader/shader.vs', src\shader.rs:29:33
stack backtrace:
0: std::panicking::begin_panic_handler
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:493
1: std::panicking::begin_panic_fmt
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:435
2: opengl::shader::{{impl}}::new::{{closure}}
at .\src\shader.rs:29
3: core::result::Result<std::fs::File, std::io::error::Error>::unwrap_or_else<std::fs::File,std::io::error::Error,closure-0>
at C:\Users\suzu6\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\result.rs:825
4: opengl::shader::Shader::new
at .\src\shader.rs:28
5: opengl::main
at .\src\main.rs:53
6: core::ops::function::FnOnce::call_once<fn(),tuple<>>
at C:\Users\suzu6\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\ops\function.rs:227
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: process didn't exit successfully: `target\debug\opengl.exe` (exit code: 101)
作成したプログラムの.\src\shader.rs:29
で呼び出しているstdのクレートの中まで追ってパニックが起きた個所を特定出来た。
クレートの中まで追ってエラー原因を特定したいときには、バックトレースを表示する。 バックトレースが表示できどんな内容か把握したので、今後エラーメッセージだけで分からないときに原因を追えるようになった。
RUST_BACKTRACE=full
RUST_BACKTRACE=1
でバックトレースを表示すると、さらにRUST_BACKTRACE=full
の設定があることも表示された。
試してみる。
# 数値ではなく文字列なので"で囲っている
> $env:RUST_BACKTRACE="full"
> cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.14s
Running `target\debug\opengl.exe`
OK: init OpenGL: version=3.1
thread 'main' panicked at 'failed to open file: rsc/shader/shader.vs', src\shader.rs:29:33
stack backtrace:
0: 0x7ff7e19b68ae - std::backtrace_rs::backtrace::dbghelp::trace
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98
1: 0x7ff7e19b68ae - std::backtrace_rs::backtrace::trace_unsynchronized
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
2: 0x7ff7e19b68ae - std::sys_common::backtrace::_print_fmt
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:67
3: 0x7ff7e19b68ae - std::sys_common::backtrace::_print::{{impl}}::fmt
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:46
4: 0x7ff7e19c9c3b - core::fmt::write
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\core\src\fmt\mod.rs:1078
5: 0x7ff7e19b3f48 - std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\io\mod.rs:1517
6: 0x7ff7e19b928d - std::sys_common::backtrace::_print
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:49
7: 0x7ff7e19b928d - std::sys_common::backtrace::print
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:36
8: 0x7ff7e19b928d - std::panicking::default_hook::{{closure}}
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:208
9: 0x7ff7e19b8cf4 - std::panicking::default_hook
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:225
10: 0x7ff7e19b9b9e - std::panicking::rust_panic_with_hook
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:591
11: 0x7ff7e19b96c1 - std::panicking::begin_panic_handler::{{closure}}
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:497
12: 0x7ff7e19b720f - std::sys_common::backtrace::__rust_end_short_backtrace<closure-0,!>
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\sys_common\backtrace.rs:141
13: 0x7ff7e19b9619 - std::panicking::begin_panic_handler
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:493
14: 0x7ff7e19b95cc - std::panicking::begin_panic_fmt
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:435
15: 0x7ff7e19745a8 - opengl::shader::{{impl}}::new::{{closure}}
at C:\git\trial-code\rust\opengl\src\shader.rs:29
16: 0x7ff7e1978cc5 - core::result::Result<std::fs::File, std::io::error::Error>::unwrap_or_else<std::fs::File,std::io::error::Error,closure-0>
at C:\Users\suzu6\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\result.rs:825
17: 0x7ff7e1976af5 - opengl::shader::Shader::new
at C:\git\trial-code\rust\opengl\src\shader.rs:28
18: 0x7ff7e1974e23 - opengl::main
at C:\git\trial-code\rust\opengl\src\main.rs:53
19: 0x7ff7e19735eb - core::ops::function::FnOnce::call_once<fn(),tuple<>>
at C:\Users\suzu6\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\ops\function.rs:227
20: 0x7ff7e1973e9b - std::sys_common::backtrace::__rust_begin_short_backtrace<fn(),tuple<>>
at C:\Users\suzu6\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\sys_common\backtrace.rs:125
21: 0x7ff7e1979591 - std::rt::lang_start::{{closure}}<tuple<>>
at C:\Users\suzu6\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\rt.rs:66
22: 0x7ff7e19b9d54 - core::ops::function::impls::{{impl}}::call_once
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\library\core\src\ops\function.rs:280
23: 0x7ff7e19b9d54 - std::panicking::try::do_call
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:379
24: 0x7ff7e19b9d54 - std::panicking::try
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panicking.rs:343
25: 0x7ff7e19b9d54 - std::panic::catch_unwind
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\panic.rs:396
26: 0x7ff7e19b9d54 - std::rt::lang_start_internal
at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b\/library\std\src\rt.rs:51
27: 0x7ff7e1979563 - std::rt::lang_start<tuple<>>
at C:\Users\suzu6\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\rt.rs:65
28: 0x7ff7e1975660 - main
29: 0x7ff7e19cf2f4 - invoke_main
at D:\a01\_work\9\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
30: 0x7ff7e19cf2f4 - __scrt_common_main_seh
at D:\a01\_work\9\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
31: 0x7ffa9a4a7034 - BaseThreadInitThunk
32: 0x7ffa9c422651 - RtlUserThreadStart
error: process didn't exit successfully: `target\debug\opengl.exe` (exit code: 101)