• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ cplus_demangle函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了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;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ cpm_line_cr_cmd函数代码示例发布时间:2022-05-30
下一篇:
C++ cpfree函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap