From a2c82a03ba613a32d6ad8e31111178083ab7da7b Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Sat, 2 Apr 2016 05:56:41 +0530 Subject: [PATCH] Add option for printing full backtraces --- components/util/opts.rs | 10 ++++++++++ components/util/thread.rs | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/components/util/opts.rs b/components/util/opts.rs index e8d5283b9b4..c2b2faefbcd 100644 --- a/components/util/opts.rs +++ b/components/util/opts.rs @@ -201,6 +201,9 @@ pub struct Opts { // Which rendering API to use. pub render_api: RenderApi, + + // don't skip any backtraces on panic + pub full_backtraces: bool, } fn print_usage(app: &str, opts: &Options) { @@ -291,6 +294,9 @@ pub struct DebugOptions { /// Use multisample antialiasing in WebRender. pub use_msaa: bool, + // don't skip any backtraces on panic + pub full_backtraces: bool, + } @@ -326,6 +332,7 @@ impl DebugOptions { "disable-vsync" => debug_options.disable_vsync = true, "wr-stats" => debug_options.webrender_stats = true, "msaa" => debug_options.use_msaa = true, + "full-backtraces" => debug_options.full_backtraces = true, "" => {}, _ => return Err(option) }; @@ -373,6 +380,7 @@ pub fn print_debug_usage(app: &str) -> ! { "Disable vsync mode in the compositor to allow profiling at more than monitor refresh rate"); print_option("wr-stats", "Show WebRender profiler on screen."); print_option("msaa", "Use multisample antialiasing in WebRender."); + print_option("full-backtraces", "Print full backtraces for all errors"); println!(""); @@ -515,6 +523,7 @@ pub fn default_opts() -> Opts { use_msaa: false, render_api: DEFAULT_RENDER_API, profile_dir: None, + full_backtraces: false, } } @@ -795,6 +804,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { webrender_stats: debug_options.webrender_stats, use_msaa: debug_options.use_msaa, profile_dir: opt_match.opt_str("profile-dir"), + full_backtraces: debug_options.full_backtraces, }; set_defaults(opts); diff --git a/components/util/thread.rs b/components/util/thread.rs index 9175996a4b2..f32e6ccd4f7 100644 --- a/components/util/thread.rs +++ b/components/util/thread.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use ipc_channel::ipc::IpcSender; +use opts; use serde::Serialize; use std::borrow::ToOwned; use std::io::{Write, stderr}; @@ -17,6 +18,11 @@ pub fn spawn_named(name: String, f: F) { let builder = thread::Builder::new().name(name); + if opts::get().full_backtraces { + builder.spawn(f).unwrap(); + return; + } + let f_with_handler = move || { let hook = take_handler();