panic!

파이썬에서 코드를 즉시 종료시키고 싶다면 예외를 발생시키면 됩니다. 어떤 종류의 예외든 상관없지만, 가장 일반적인 경우를 발생시켜 보면 다음과 같습니다.

raise Exception

실행 결과

Traceback (most recent call last): File "/temp/python/main.py", line 1, in <module> raise Exception Exception

러스트에서 프로그램이 예상치 못한 오류로 종료되는 경우, 패닉이 발생한다고 합니다. 패닉이 발생하는 경우는 두 가지입니다.

  • 패닉이 발생하는 코드를 실행(예: 배열에 잘못된 인덱스를 참조하는 경우)
  • panic! 매크로를 직접 실행하는 경우

panic!은 러스트에서 제공하는 편리한 매크로로, 프로그램이 즉시 종료됩니다.

fn main() { panic!("🤯"); }

실행 결과

#![allow(unused)] fn main() { thread 'main' panicked at '🤯', src/main.rs:2:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace }

여기서 어떤 코드가 문제인지를 알고 싶다면, 컴파일러가 알려준 대로 환경 변수 RUST_BACKTRACE=1를 사용해 컴파일하면 됩니다.

RUST_BACKTRACE=1 cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.05s Running `target/debug/rust_part` thread 'main' panicked at '🤯', src/main.rs:2:5 stack backtrace: 0: rust_begin_unwind at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:575:5 1: core::panicking::panic_fmt at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/panicking.rs:64:14 2: chat_server::main at ./src/main.rs:2:5 3: core::ops::function::FnOnce::call_once at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/ops/function.rs:507:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

릴리즈 모드로 빌드할 경우, 백트레이스는 포함되지 않기 때문에 컴파일 시 별도의 디버그 심볼을 제공해주어야 합니다.