Open
Description
Feature gate: #![feature(panic_backtrace_config)]
This is a tracking issue for configuring the capture and display of backtraces in the default panic hook, as well as exposing that configuration to third-party libraries for usage.
Public API
mod panic {
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum BacktraceStyle {
Short,
Full,
Off,
}
fn set_backtrace_style(BacktraceStyle);
fn get_backtrace_style() -> Option<BacktraceStyle>;
}
This API is intended to form part of the strategy for addressing the unsoundness of the std::env::set_var
API on some platforms (mostly non-Windows). See #92431 (comment) for a summary.
Steps / History
- Implementation: Support configuring whether to capture backtraces at runtime #93101
- Final comment period (FCP)
- Stabilization PR
Unresolved Questions
- Do we need to move to a thread-local or otherwise more customizable strategy for whether to capture backtraces? See this comment for some potential use cases for this.
- Proposed answer: no, leave this for third-party hooks.
- Bikeshed on naming of all the options, as usual.
- Should BacktraceStyle be moved into
std::backtrace
?- It's already somewhat annoying to import and/or re-type the
std::panic::
prefix necessary to use these APIs, probably adding a second module to the mix isn't worth it.
- It's already somewhat annoying to import and/or re-type the
- Should
get_backtrace_style
be exposed?- The
Option<BacktraceStyle>
return type looks a little weird, and may not mean the intuitive thing --None
representsUnsupported
, not "not set" or "don't print backtraces", as might be initially assumed. - We may want a
std::panic::report_backtrace(&mut dyn Write)
instead which internally knows how to format things.
- The