Capture unresolved backtraces on traps (#4193)

I was running tests recently and was surprised that the `--test all`
test was taking more than a minute to run when I didn't recall it ever
taking more than a minute historically. A bisection pointed out #4183 as
the cause and after re-reviewing I realized I forgot that we capture
unresolved backtraces by default (and don't actually resolve them
anywhere yet but that's a problem for another day) rather than resolved
backtraces. This means that it's intended that we use
`Backtrace::new_unresolved` instead of `Backtrace::new` in the
traphandlers crate.

The reason that tests were running so slowly is that the tests which
deal with deep stacks (e.g. stack overflow) would take forever in
testing as the Rust-based decoding of DWARF information is egregiously
slow in unoptimized mode. I did discover independently that optimizing
these dependencies makes the tests ~6x faster, but that's irrelevant if
we're not symbolicating in the first place.
This commit is contained in:
Alex Crichton
2022-05-31 09:56:56 -05:00
committed by GitHub
parent bffce37050
commit 7d3639522e

View File

@@ -273,7 +273,7 @@ impl CallThreadState {
fn unwind_with(&self, reason: UnwindReason) -> ! { fn unwind_with(&self, reason: UnwindReason) -> ! {
let backtrace = if self.capture_backtrace { let backtrace = if self.capture_backtrace {
Some(Backtrace::new()) Some(Backtrace::new_unresolved())
} else { } else {
None None
}; };
@@ -340,7 +340,7 @@ impl CallThreadState {
fn capture_backtrace(&self, pc: *const u8) { fn capture_backtrace(&self, pc: *const u8) {
let backtrace = if self.capture_backtrace { let backtrace = if self.capture_backtrace {
Some(Backtrace::new()) Some(Backtrace::new_unresolved())
} else { } else {
None None
}; };