2 // ignore-android FIXME #17520
3 // ignore-emscripten spawning processes is not supported
4 // ignore-openbsd no support for libbacktrace without filename
5 // ignore-sgx no processes
6 // ignore-msvc see #62897 and `backtrace-debuginfo.rs` test
8 // compile-flags:-Cstrip=none
11 use std::process::Command;
15 let args: Vec<String> = env::args().collect();
16 if args.len() >= 2 && args[1] == "force" {
17 println!("stack backtrace:\n{}", std::backtrace::Backtrace::force_capture());
18 } else if args.len() >= 2 {
19 println!("stack backtrace:\n{}", std::backtrace::Backtrace::capture());
26 fn runtest(me: &str) {
27 env::remove_var("RUST_BACKTRACE");
28 env::remove_var("RUST_LIB_BACKTRACE");
30 let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "1").output().unwrap();
31 assert!(p.status.success());
32 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
33 assert!(String::from_utf8_lossy(&p.stdout).contains("backtrace::main"));
35 let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "0").output().unwrap();
36 assert!(p.status.success());
37 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
39 let p = Command::new(me).arg("a").output().unwrap();
40 assert!(p.status.success());
41 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
43 let p = Command::new(me)
45 .env("RUST_LIB_BACKTRACE", "1")
46 .env("RUST_BACKTRACE", "1")
49 assert!(p.status.success());
50 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
52 let p = Command::new(me)
54 .env("RUST_LIB_BACKTRACE", "0")
55 .env("RUST_BACKTRACE", "1")
58 assert!(p.status.success());
59 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
61 let p = Command::new(me)
63 .env("RUST_LIB_BACKTRACE", "0")
64 .env("RUST_BACKTRACE", "0")
67 assert!(p.status.success());
68 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
70 let p = Command::new(me).arg("force").output().unwrap();
71 assert!(p.status.success());
72 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));