]> git.lizzy.rs Git - rust.git/commit
auto merge of #12602 : alexcrichton/rust/backtrace, r=brson
authorbors <bors@rust-lang.org>
Thu, 13 Mar 2014 08:11:39 +0000 (01:11 -0700)
committerbors <bors@rust-lang.org>
Thu, 13 Mar 2014 08:11:39 +0000 (01:11 -0700)
commit12b2607572d6233a1d4b4f7592573e49b505771e
treefe0125830b682b441cc97b4ad24cc11bb2882d38
parent6cbba7c54e4e1e02d4ff3ffacf46d15d0f3a039c
parent829df69f9f7a0dd0adbf072a47fd7c7600e75211
auto merge of #12602 : alexcrichton/rust/backtrace, r=brson

Whenever a failure happens, if a program is run with
`RUST_LOG=std::rt::backtrace` a backtrace will be printed to the task's stderr
handle. Stack traces are uncondtionally printed on double-failure and
rtabort!().

This ended up having a nontrivial implementation, and here's some highlights of
it:

* We're bundling libbacktrace for everything but OSX and Windows
* We use libgcc_s and its libunwind apis to get a backtrace of instruction
  pointers
* On OSX we use dladdr() to go from an instruction pointer to a symbol
* On unix that isn't OSX, we use libbacktrace to get symbols
* Windows, as usual, has an entirely separate implementation

Lots more fun details and comments can be found in the source itself.

Closes #10128