Struct backtrace::Backtrace

source ·
pub struct Backtrace {
    frames: Vec<BacktraceFrame>,
    actual_start_index: usize,
}
Expand description

Representation of an owned and self-contained backtrace.

This structure can be used to capture a backtrace at various points in a program and later used to inspect what the backtrace was at that time.

Backtrace supports pretty-printing of backtraces through its Debug implementation.

Required features

This function requires the std feature of the backtrace crate to be enabled, and the std feature is enabled by default.

Fields§

§frames: Vec<BacktraceFrame>§actual_start_index: usize

Implementations§

source§

impl Backtrace

source

pub fn new() -> Backtrace

Captures a backtrace at the callsite of this function, returning an owned representation.

This function is useful for representing a backtrace as an object in Rust. This returned value can be sent across threads and printed elsewhere, and the purpose of this value is to be entirely self contained.

Note that on some platforms acquiring a full backtrace and resolving it can be extremely expensive. If the cost is too much for your application it’s recommended to instead use Backtrace::new_unresolved() which avoids the symbol resolution step (which typically takes the longest) and allows deferring that to a later date.

Examples
use backtrace::Backtrace;

let current_backtrace = Backtrace::new();
Required features

This function requires the std feature of the backtrace crate to be enabled, and the std feature is enabled by default.

source

pub fn new_unresolved() -> Backtrace

Similar to new except that this does not resolve any symbols, this simply captures the backtrace as a list of addresses.

At a later time the resolve function can be called to resolve this backtrace’s symbols into readable names. This function exists because the resolution process can sometimes take a significant amount of time whereas any one backtrace may only be rarely printed.

Examples
use backtrace::Backtrace;

let mut current_backtrace = Backtrace::new_unresolved();
println!("{:?}", current_backtrace); // no symbol names
current_backtrace.resolve();
println!("{:?}", current_backtrace); // symbol names now present
Required features

This function requires the std feature of the backtrace crate to be enabled, and the std feature is enabled by default.

source

fn create(ip: usize) -> Backtrace

source

pub fn frames(&self) -> &[BacktraceFrame]

Returns the frames from when this backtrace was captured.

The first entry of this slice is likely the function Backtrace::new, and the last frame is likely something about how this thread or the main function started.

Required features

This function requires the std feature of the backtrace crate to be enabled, and the std feature is enabled by default.

source

pub fn resolve(&mut self)

If this backtrace was created from new_unresolved then this function will resolve all addresses in the backtrace to their symbolic names.

If this backtrace has been previously resolved or was created through new, this function does nothing.

Required features

This function requires the std feature of the backtrace crate to be enabled, and the std feature is enabled by default.

Trait Implementations§

source§

impl Clone for Backtrace

source§

fn clone(&self) -> Backtrace

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Backtrace

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Backtrace

source§

fn default() -> Backtrace

Returns the “default value” for a type. Read more
source§

impl From<Vec<BacktraceFrame, Global>> for Backtrace

source§

fn from(frames: Vec<BacktraceFrame>) -> Self

Converts to this type from the input type.
source§

impl Into<Vec<BacktraceFrame, Global>> for Backtrace

source§

fn into(self) -> Vec<BacktraceFrame>

Converts this type into the (usually inferred) input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.