std: Add a backtrace
module
This commit adds a `backtrace` module to the standard library, as designed in [RFC 2504]. The `Backtrace` type is intentionally very conservative, effectively only allowing capturing it and printing it. Additionally this commit also adds a `backtrace` method to the `Error` trait which defaults to returning `None`, as specified in [RFC 2504]. More information about the design here can be found in [RFC 2504] and in the [tracking issue]. Implementation-wise this is all based on the `backtrace` crate and very closely mirrors the `backtrace::Backtrace` type on crates.io. Otherwise it's pretty standard in how it handles everything internally. [RFC 2504]: https://github.com/rust-lang/rfcs/blob/master/text/2504-fix-error.md [tracking issue]: https://github.com/rust-lang/rust/issues/53487 cc #53487
This commit is contained in:
parent
824383d4ab
commit
34662c6961
5 changed files with 508 additions and 54 deletions
|
@ -17,6 +17,7 @@ use core::array;
|
|||
|
||||
use crate::alloc::{AllocErr, LayoutErr, CannotReallocInPlace};
|
||||
use crate::any::TypeId;
|
||||
use crate::backtrace::Backtrace;
|
||||
use crate::borrow::Cow;
|
||||
use crate::cell;
|
||||
use crate::char;
|
||||
|
@ -204,6 +205,20 @@ pub trait Error: Debug + Display {
|
|||
fn type_id(&self, _: private::Internal) -> TypeId where Self: 'static {
|
||||
TypeId::of::<Self>()
|
||||
}
|
||||
|
||||
/// Returns a stack backtrace, if available, of where this error ocurred.
|
||||
///
|
||||
/// This function allows inspecting the location, in code, of where an error
|
||||
/// happened. The returned `Backtrace` contains information about the stack
|
||||
/// trace of the OS thread of execution of where the error originated from.
|
||||
///
|
||||
/// Note that not all errors contain a `Backtrace`. Also note that a
|
||||
/// `Backtrace` may actually be empty. For more information consult the
|
||||
/// `Backtrace` type itself.
|
||||
#[unstable(feature = "backtrace", issue = "53487")]
|
||||
fn backtrace(&self) -> Option<&Backtrace> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
mod private {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue