Struct symbolic_common::Name [−][src]
pub struct Name<'a> { /* fields omitted */ }
Expand description
The name of a potentially mangled symbol.
Debugging information often only contains mangled names in their symbol and debug information
data. The mangling schema depends on the compiler and programming language. Name
is a wrapper
type for potentially mangled names and an optionally declared language. To demangle the name,
see the demangle
feature of symbolic
.
Not all sources declare a programming language. In such a case, the language
will be
Unknown
. However, it may still be inferred for demangling by inspecting the mangled string.
Names can refer either functions, types, fields, or virtual constructs. Their semantics are fully defined by the language and the compiler.
Examples
Create a name and print it:
use symbolic_common::Name;
let name = Name::from("_ZN3foo3barEv");
assert_eq!(name.to_string(), "_ZN3foo3barEv");
Create a name with a language and explicit mangling state. Alternate formatting prints the language:
use symbolic_common::{Language, Name, NameMangling};
let name = Name::new("_ZN3foo3barEv", NameMangling::Mangled, Language::Cpp);
assert_eq!(format!("{:#}", name), "_ZN3foo3barEv [C++]");
Implementations
Constructs a new Name with given mangling and language.
In case both the mangling state and the language are unknown, a simpler alternative to use
is Name::from
.
Example
use symbolic_common::{Language, Name, NameMangling};
let name = Name::new("_ZN3foo3barEv", NameMangling::Mangled, Language::Cpp);
assert_eq!(format!("{:#}", name), "_ZN3foo3barEv [C++]");
Returns the raw, mangled string of the name.
Example
use symbolic_common::{Language, Name, NameMangling};
let name = Name::new("_ZN3foo3barEv", NameMangling::Mangled, Language::Cpp);
assert_eq!(name.as_str(), "_ZN3foo3barEv");
This is also available as an AsRef<str>
implementation:
use symbolic_common::{Language, Name, NameMangling};
let name = Name::new("_ZN3foo3barEv", NameMangling::Mangled, Language::Cpp);
assert_eq!(name.as_ref(), "_ZN3foo3barEv");
Set the Name
’s language.
The language of the mangled symbol.
If the language is not declared in the source, this returns Language::Unknown
. The
language may still be inferred using detect_language
, which is declared on the Demangle
extension trait.
Example
use symbolic_common::{Language, Name, NameMangling};
let name = Name::new("_ZN3foo3barEv", NameMangling::Mangled, Language::Cpp);
assert_eq!(name.language(), Language::Cpp);
Set the Name
’s mangling state.
Returns the Name
’s mangling state.
Example
use symbolic_common::{Language, Name, NameMangling};
let unmangled = Name::new("foo::bar", NameMangling::Unmangled, Language::Unknown);
assert_eq!(unmangled.mangling(), NameMangling::Unmangled);
Trait Implementations
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations
impl<'a> RefUnwindSafe for Name<'a>
impl<'a> UnwindSafe for Name<'a>
Blanket Implementations
Mutably borrows from an owned value. Read more