Struct breakpad_symbols::Symbolizer
[−]
[src]
pub struct Symbolizer { /* fields omitted */ }
Symbolicate stack frames.
A Symbolizer
manages loading symbols and looking up symbols in them
including caching so that symbols for a given module are only loaded once.
Call Symbolizer::new
to instantiate a Symbolizer
. A Symbolizer
requires a SymbolSupplier
to locate symbols. If you have
symbols on disk in the customary directory layout, a
SimpleSymbolSupplier
will work.
Use get_symbol_at_address
or fill_symbol
to
do symbol lookup.
Methods
impl Symbolizer
[src]
fn new<T: SymbolSupplier + 'static>(supplier: T) -> Symbolizer
[src]
Create a Symbolizer
that uses supplier
to locate symbols.
fn get_symbol_at_address(
&self,
debug_file: &str,
debug_id: &str,
address: u64
) -> Option<String>
[src]
&self,
debug_file: &str,
debug_id: &str,
address: u64
) -> Option<String>
Helper method for non-minidump-using callers.
Pass debug_file
and debug_id
describing a specific module,
and address
, a module-relative address, and get back
a symbol in that module that covers that address, or None
.
See the module-level documentation for an example.
fn fill_symbol(&self, module: &Module, frame: &mut FrameSymbolizer)
[src]
Fill symbol information in frame
using the instruction address
from frame
, and the module information from module
. If you're not
using a minidump module, you can use SimpleModule
and
SimpleFrame
.
Examples
use breakpad_symbols::{SimpleSymbolSupplier,Symbolizer,SimpleFrame,SimpleModule}; use std::path::PathBuf; let paths = vec!(PathBuf::from("../testdata/symbols/")); let supplier = SimpleSymbolSupplier::new(paths); let symbolizer = Symbolizer::new(supplier); let m = SimpleModule::new("test_app.pdb", "5A9832E5287241C1838ED98914E9B7FF1"); let mut f = SimpleFrame::with_instruction(0x1010); symbolizer.fill_symbol(&m, &mut f); assert_eq!(f.function.unwrap(), "vswprintf"); assert_eq!(f.source_file.unwrap(), r"c:\program files\microsoft visual studio 8\vc\include\swprintf.inl"); assert_eq!(f.source_line.unwrap(), 51);