本文整理汇总了C++中cplus_demangle函数的典型用法代码示例。如果您正苦于以下问题:C++ cplus_demangle函数的具体用法?C++ cplus_demangle怎么用?C++ cplus_demangle使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cplus_demangle函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Demangled
std::string Demangled(const std::string& name)
{
std::string demangled;
demangling_styles style = auto_demangling;
if (name[0] == '_')
{
style = gnu_v3_demangling;
}
if (name[0] == '?')
{
// style = msvc_demangling;
}
#ifdef _MSC_VER
style = msvc_demangling; // TODO remove
#endif
cplus_demangle_set_style (style);
char* res = cplus_demangle (name.c_str(), DMGL_ANSI | DMGL_PARAMS);
if (res != 0)
{
demangled = res;
}
free(res);
return demangled;
}
开发者ID:epronk,项目名称:nmdepend,代码行数:31,代码来源:Demangler.cpp
示例2: demangle_it
static void
demangle_it (char *mangled_name)
{
char *result;
unsigned int skip_first = 0;
/* _ and $ are sometimes found at the start of function names
in assembler sources in order to distinguish them from other
names (eg register names). So skip them here. */
if (mangled_name[0] == '.' || mangled_name[0] == '$')
++skip_first;
if (strip_underscore && mangled_name[skip_first] == '_')
++skip_first;
result = cplus_demangle (mangled_name + skip_first, flags);
if (result == NULL)
printf ("%s", mangled_name);
else
{
if (mangled_name[0] == '.')
putchar ('.');
printf ("%s", result);
free (result);
}
}
开发者ID:msmania,项目名称:gdb,代码行数:26,代码来源:cxxfilt.c
示例3: my_demangle
const char *
my_demangle(const char *function_name) {
const char *tmp, *fn_copy;
#ifdef USE_CXA_DEMANGLE
extern char *__cxa_demangle(const char *, char *, size_t *, int *);
#endif
debug(DEBUG_FUNCTION, "my_demangle(name=%s)", function_name);
if (!d)
d = dict_init(dict_key2hash_string, dict_key_cmp_string);
tmp = dict_find_entry(d, (void *)function_name);
if (!tmp) {
fn_copy = strdup(function_name);
#ifdef HAVE_LIBIBERTY
tmp = cplus_demangle(function_name, DMGL_ANSI | DMGL_PARAMS);
#elif defined USE_CXA_DEMANGLE
int status = 0;
tmp = __cxa_demangle(function_name, NULL, NULL, &status);
#endif
if (!tmp)
tmp = fn_copy;
if (tmp)
dict_enter(d, (void *)fn_copy, (void *)tmp);
}
return tmp;
}
开发者ID:5py,项目名称:ltrace,代码行数:28,代码来源:demangle.c
示例4: resolve
bool resolve(uint64_t ip, SP_Location &loc)
{
uint64_t vma = bfd_get_section_vma(m_abfd, m_text);
uint64_t size = bfd_get_section_size(m_text);
uint64_t offset = ip - vma;
if (ip < vma || ip > vma + size)
return false;
loc.ip = ip;
loc.module = m_path;
const char *sym, *file;
if (!bfd_find_nearest_line(m_abfd, m_text, m_syms, offset, &file, &sym, &loc.line))
return false;
loc.symbol = sym;
loc.file = file ? file : "";
char *demangled = cplus_demangle(sym, DMGL_AUTO);
if (demangled) {
loc.symbol = demangled;
free(demangled);
}
return true;
}
开发者ID:heuripedes,项目名称:stepprof,代码行数:29,代码来源:sp_module.cpp
示例5: cplus_demangle
static char
*demangleSymbolCString(const char *mangled)
{
if(mangled[0]!='_') return NULL;
if(mangled[1]=='_') mangled++; // allow either __Z or _Z prefix
if(mangled[1]!='Z') return NULL;
return cplus_demangle(mangled, 0);
}
开发者ID:Aj0Ay,项目名称:dtrace-for-linux,代码行数:8,代码来源:output.c
示例6: sp_rtrace_tracker_query_symbol
char* sp_rtrace_tracker_query_symbol(sp_rtrace_tracker_t* tracker, const char* name)
{
char* demangled_name = (char*)cplus_demangle(name, DMGL_ANSI | DMGL_PARAMS);
if (!tfind(demangled_name ? demangled_name : name, &tracker->symbols, (int (*)(const void *, const void *))_strcmpp)) {
return NULL;
}
return demangled_name ? demangled_name : strdup(name);
}
开发者ID:mer-tools,项目名称:sp-rtrace,代码行数:8,代码来源:sp_rtrace_tracker.c
示例7: cplus_demangle
void BacktraceNames::Demangle()
{
char *f = cplus_demangle(Symbol, 0);
if(!f)
return;
Symbol = f;
free(f);
}
开发者ID:Prcuvu,项目名称:StepMania-3.95,代码行数:8,代码来源:BacktraceNames.cpp
示例8: demangle
char *
demangle(const char *sym)
{
#ifdef HAVE_LIBBFD
string_var dem = cplus_demangle(sym, DMGL_ANSI|DMGL_PARAMS);
return (dem == 0 ? g_strdup(sym) : normalise_whitespace(dem));
#else
return g_strdup(sym);
#endif
}
开发者ID:ggcov,项目名称:ggcov,代码行数:10,代码来源:demangle.c
示例9: cplus_demangle
const char *try_demangle(const char *mangled)
{
const char *demangled = cplus_demangle(mangled,
DMGL_GNU_V3 | DMGL_TYPES | DMGL_ANSI | DMGL_PARAMS);
if (demangled != NULL) {
return demangled;
} else {
return mangled;
}
}
开发者ID:sigsegv-mvm,项目名称:classgraph,代码行数:11,代码来源:demangle.c
示例10: demangle
char *
demangle (bfd *abfd, const char *name)
{
char *res, *alloc;
const char *pre, *suf;
size_t pre_len;
if (abfd != NULL && bfd_get_symbol_leading_char (abfd) == name[0])
++name;
/* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
or the MS PE format. These formats have a number of leading '.'s
on at least some symbols, so we remove all dots to avoid
confusing the demangler. */
pre = name;
while (*name == '.')
++name;
pre_len = name - pre;
alloc = NULL;
suf = strchr (name, '@');
if (suf != NULL)
{
alloc = xmalloc (suf - name + 1);
memcpy (alloc, name, suf - name);
alloc[suf - name] = '\0';
name = alloc;
}
res = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
if (res != NULL)
{
/* Now put back any suffix, or stripped dots. */
if (pre_len != 0 || suf != NULL)
{
size_t len;
size_t suf_len;
char *final;
if (alloc != NULL)
free (alloc);
len = strlen (res);
if (suf == NULL)
suf = res + len;
suf_len = strlen (suf) + 1;
final = xmalloc (pre_len + len + suf_len);
memcpy (final, pre, pre_len);
memcpy (final + pre_len, res, len);
memcpy (final + pre_len + len, suf, suf_len);
free (res);
res = final;
}
开发者ID:great90,项目名称:gcl,代码行数:54,代码来源:budemang.c
示例11: cplus_demangle
static char
*demangleSymbolCString(const char *mangled)
{
# if HAVE_CPLUS_DEMANGLE
if(mangled[0]!='_') return NULL;
if(mangled[1]=='_') mangled++; // allow either __Z or _Z prefix
if(mangled[1]!='Z') return NULL;
return cplus_demangle(mangled, 0);
# else
return NULL;
# endif
}
开发者ID:Aj0Ay,项目名称:dtrace-for-linux,代码行数:12,代码来源:dwarf.c
示例12: demangle_it
static void
demangle_it (char *mangled_name)
{
char *result;
/* For command line args, also try to demangle type encodings. */
result = cplus_demangle (mangled_name, flags | DMGL_TYPES);
if (result == NULL)
{
printf ("%s\n", mangled_name);
}
else
{
printf ("%s\n", result);
free (result);
}
}
开发者ID:HoMeCracKeR,项目名称:gdb-ng,代码行数:17,代码来源:cxxfilt.c
示例13: main
int main(int argc, const char * argv[])
{
// insert code here...
atosl("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser",0x1000,0x80000);
atosl("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser",0x1000,0x80000);
atosl("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser",0x1000,0x80000);
std::cout << "Hello, World!\n";
char* s=cplus_demangle("_ZN7WebCore4Page8goToItemEPNS_11HistoryItemENS_13FrameLoadTypeE", 0);
symbolFile file;
file.open("/Users/zhujialai/Downloads/libatosl/ksmobilebrowser");
s=file.find(0x80000);
s=file.find(0x80000);
s=file.find(0x80000);
file.close();
return 0;
}
开发者ID:wellcomez,项目名称:crash,代码行数:17,代码来源:main.cpp
示例14: demangle_new_symbols
static void
demangle_new_symbols (void)
{
symbol *sym;
while ((sym = symbol_pop ()) != NULL)
{
demangled *dem;
const char *p = cplus_demangle (sym->key, DMGL_PARAMS | DMGL_ANSI);
if (! p)
continue;
dem = demangled_hash_lookup (p, true);
dem->mangled = sym->key;
}
}
开发者ID:aosm,项目名称:gcc_40,代码行数:17,代码来源:tlink.c
示例15: P_cplus_demangle
char * P_cplus_demangle( const char * symbol, bool nativeCompiler,
bool includeTypes)
{
int opts = 0;
opts = includeTypes ? DMGL_PARAMS | DMGL_ANSI : 0;
//opts |= nativeCompiler ? DMGL_AUTO : DMGL_GNU;
opts |= DMGL_GNU_V3;
char *demangled = cplus_demangle( const_cast<char *>( symbol ), opts);
if (demangled == NULL) return NULL;
//fprintf(stderr, "%s[%d]: cplus_demangle: %p: %s\n", __FILE__, __LINE__, current_demangling_style, libiberty_demanglers[0].demangling_style_name);
char *open_paren = strchr(demangled, '(');
if (open_paren)
*open_paren = '\0';
return demangled;
} /* end P_cplus_demangle() */
开发者ID:vishalmistry,项目名称:imitate,代码行数:17,代码来源:osfKludges.C
示例16: my_demangle
const char *
my_demangle(const char *function_name) {
#ifdef USE_CXA_DEMANGLE
extern char *__cxa_demangle(const char *, char *, size_t *, int *);
#endif
debug(DEBUG_FUNCTION, "my_demangle(name=%s)", function_name);
if (name_cache == NULL) {
name_cache = malloc(sizeof(*name_cache));
if (name_cache != NULL)
DICT_INIT(name_cache, const char *, const char *,
dict_hash_string, dict_eq_string, NULL);
}
const char *tmp = NULL;
if (name_cache != NULL
&& DICT_FIND_VAL(name_cache, &function_name, &tmp) == 0)
return tmp;
#ifdef HAVE_LIBIBERTY
tmp = cplus_demangle(function_name,
DMGL_ANSI | DMGL_PARAMS);
#elif defined USE_CXA_DEMANGLE
int status = 0;
tmp = __cxa_demangle(function_name, NULL, NULL, &status);
#endif
if (name_cache == NULL || tmp == NULL) {
fail:
if (tmp == NULL)
return function_name;
return tmp;
}
const char *fn_copy = strdup(function_name);
if (fn_copy == NULL)
goto fail;
if (DICT_INSERT(name_cache, &fn_copy, &tmp) < 0) {
free((char *)fn_copy);
goto fail;
}
return tmp;
}
开发者ID:Marsel95,项目名称:ltrace,代码行数:45,代码来源:demangle.c
示例17: cplus_demangle
bool SP_ModuleBag::resolve(uint64_t ip, SP_Location &loc)
{
if (d->m_cache.find(ip) != d->m_cache.end()) {
loc = d->m_cache[ip];
return true;
}
#ifdef HAVE_LIBBFD
if (d->m_main->resolve(ip, loc)) {
d->m_cache[ip] = loc;
return true;
}
for (auto &map : d->m_maps) {
if (ip >= map.start && ip <= map.end && map.mod->resolve(ip - map.start, loc)) {
loc.ip = ip; /* use the loaded address */
d->m_cache[ip] = loc;
return true;
}
}
#endif
auto it = d->m_fallback.find(ip);
if (it != d->m_fallback.end()) {
loc.ip = ip;
loc.file = std::string();
loc.line = 0;
loc.symbol = it->second;
#ifdef HAVE_LIBIBERTY
char *demangled = cplus_demangle(it->second.c_str(), DMGL_AUTO);
if (demangled) {
loc.symbol = demangled;
free(demangled);
}
#endif
d->m_cache[ip] = loc;
return true;
}
return false;
}
开发者ID:heuripedes,项目名称:stepprof,代码行数:44,代码来源:sp_module.cpp
示例18: assert
std::string StackTrace::Demangle(const char *mangled) {
assert(mangled);
if (!mangled || !*mangled) {
return "";
}
size_t skip_first = 0;
if (mangled[0] == '.' || mangled[0] == '$') ++skip_first;
//if (mangled[skip_first] == '_') ++skip_first;
char *result = cplus_demangle(mangled + skip_first, DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE);
if (result == nullptr) return mangled;
std::string ret;
if (mangled[0] == '.') ret += '.';
ret += result;
free (result);
return ret;
}
开发者ID:Alienfeel,项目名称:hhvm,代码行数:19,代码来源:stack-trace.cpp
示例19: get_symbol
std::string get_symbol(void *ptr)
{
if(!ptr)
return std::string();
std::ostringstream res;
res.imbue(std::locale::classic());
res << ptr<<": ";
Dl_info info = {0};
if(dladdr(ptr,&info) == 0) {
res << "???";
}
else {
if(info.dli_sname) {
#if defined(BOOSTER_HAVE_ABI_CXA_DEMANGLE)
int status = 0;
char *demangled = abi::__cxa_demangle(info.dli_sname,0,0,&status);
#elif defined(BOOSTER_HAVE_SOLARIS_DEMANGLE)
char demangled[1024];
const int result = cplus_demangle(info.dli_sname, demangled, sizeof(demangled));
#else
char *demangled = 0;
#endif
if(demangled) {
res << demangled;
free(demangled);
}
else {
res << info.dli_sname;
}
}
else {
res << "???";
}
unsigned offset = (char *)ptr - (char *)info.dli_saddr;
res << std::hex <<" + 0x" << offset ;
// We don't print the file name since the function name should be enough.
// if(info.dli_fname)
// res << " in " << info.dli_fname;
}
return res.str();
}
开发者ID:Nanonid,项目名称:Javolution,代码行数:43,代码来源:backtrace.cpp
示例20: BfdDemangleSymName
static
BOOL BfdDemangleSymName(LPCTSTR lpName, LPTSTR lpDemangledName, DWORD nSize)
{
char *res;
assert(lpName != NULL);
if((res = cplus_demangle(lpName, DMGL_ANSI /*| DMGL_PARAMS*/)) == NULL)
{
lstrcpyn(lpDemangledName, lpName, nSize);
return FALSE;
}
else
{
lstrcpyn(lpDemangledName, res, nSize);
free (res);
return TRUE;
}
}
开发者ID:blezek,项目名称:warzone2100,代码行数:19,代码来源:exchndl.c
注:本文中的cplus_demangle函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论