2 // ignore-android FIXME #17520
3 // ignore-cloudabi spawning processes is not supported
4 // ignore-emscripten spawning processes is not supported
5 // ignore-openbsd no support for libbacktrace without filename
6 // ignore-sgx no processes
7 // ignore-msvc see #62897 and `backtrace-debuginfo.rs` test
10 #![feature(backtrace)]
13 use std::process::Command;
17 let args: Vec<String> = env::args().collect();
18 if args.len() >= 2 && args[1] == "force" {
19 println!("{}", std::backtrace::Backtrace::force_capture());
20 } else if args.len() >= 2 {
21 println!("{}", std::backtrace::Backtrace::capture());
28 fn runtest(me: &str) {
29 env::remove_var("RUST_BACKTRACE");
30 env::remove_var("RUST_LIB_BACKTRACE");
32 let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "1").output().unwrap();
33 assert!(p.status.success());
34 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
35 assert!(String::from_utf8_lossy(&p.stdout).contains("backtrace::main"));
37 let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "0").output().unwrap();
38 assert!(p.status.success());
39 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
41 let p = Command::new(me).arg("a").output().unwrap();
42 assert!(p.status.success());
43 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
45 let p = Command::new(me)
47 .env("RUST_LIB_BACKTRACE", "1")
48 .env("RUST_BACKTRACE", "1")
51 assert!(p.status.success());
52 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
54 let p = Command::new(me)
56 .env("RUST_LIB_BACKTRACE", "0")
57 .env("RUST_BACKTRACE", "1")
60 assert!(p.status.success());
61 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
63 let p = Command::new(me)
65 .env("RUST_LIB_BACKTRACE", "0")
66 .env("RUST_BACKTRACE", "0")
69 assert!(p.status.success());
70 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
72 let p = Command::new(me).arg("force").output().unwrap();
73 assert!(p.status.success());
74 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));