如何识别C++编译以后的函数名

C/C++语言在编译以后,函数的名字会被编译器修改,改成编译器内部的名字,这个名字会在链接的时候用到。如果用backtrace之类的函数打印堆栈时,显示的就是被编译器修改过的名字,比如说_Z3foov 。 那么这个函数真实的名字是什么呢?

每个编译器都有一套自己内部的名字,这里只是针对linux下g++而言。 以下是基本的方法: 每个方法都是以_Z开头,对于嵌套的名字(比如名字空间中的名字或者是类中间的名字,比如Class::Func)后面紧跟N , 然后是各个名字空间和类的名字,每个名字前是名字字符的长度,再以E结尾。(如果不是嵌套名字则不需要以E结尾)

比如上面的_Z3foov 就是函数foo() , v 表示参数类型为void . 又如N:C:Func 经过修饰后就是 _ZN1N1C4FuncE, 这个函数名后面跟参数类型。 如果跟一个整型,那就是_ZN1N1C4FuncEi

另外在linux下有一个工具可以实现这种转换,这个工具是c++filt , 注意不是c++filter.

xuyang@ubuntu15:~/blog$ c++filt _ZN1N1C4FuncEi
N::C::Func(int)

复制

native: #05 pc 003f0bcb /system/lib/libart.so (_ZN3art25JniMethodEndWithReferenceEP8_jobjectjPNS_6ThreadE+30)

类或命名空间中的变量或函数:

以”_ZN”开头,然后是各个空间和类的名字,每个名字前是名的字符长度,然后是变量/函数名的长度和变量/函数名,后面紧跟”E”,然后如果是函数则跟参数别名,如果是变量则什么都不用加。如上面代码中的:mangling::C1::C2::func(int i)改编后的符号是_ZN8mangling2C12C24funcEi

ZN

3art

25JniMethodEndWithReference

_EP8_jobjectjPNS_6ThreadE+30

SIGABRT的可能原因

3种可能 1、double free/free 没有初始化的地址或者错误的地址 2、堆越界 3、assert

ID: 虚拟机分配的唯一的线程ID,在Dalvik里,它们是从3开始的奇数。 Tid:linux的线程ID号 Stauts:线程状态,比较多,有下面的一些 ​ running: 正在执行程序代码 ​ sleeping:执行了Thread.sleep() ​ monitor:等待接受一个监听锁。 ​ wait::Object.wait(),等待被其他线程唤醒 ​ native:正在执行native代码, ​ vmwait:等待虚拟机,(这个不是很懂,高手指教,这个状态在什么情况下发生) ​ zombie:线程在垂死的进程 ​ init:线程在初始化(我们不可能看到) ​ starting:线程正在启动(我们不可能看到) utime:执行用户代码的累计时间 stime:执行系统代码的累计时间 name:线程的名字

04-22 11:12:22.105  8084  8691 E art     : JNI ERROR (app bug): accessed deleted global reference 0x7fa
04-22 11:12:22.128  8084  8691 F art     : art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: use of deleted global reference 0x7fa
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]     from android.hardware.usb.UsbRequest android.hardware.usb.UsbDeviceConnection.native_request_wait()
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470] "Usb Read Thread" prio=5 tid=22 Runnable
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   | group="main" sCount=0 dsCount=0 obj=0x32c46d30 self=0xdf4d8d00
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   | sysTid=8691 nice=0 cgrp=default sched=0/0 handle=0xc9c13920
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   | state=R schedstat=( 579270 485573 4 ) utm=0 stm=0 core=1 HZ=100
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   | stack=0xc9b11000-0xc9b13000 stackSize=1038KB
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   | held mutexes= "mutator lock"(shared held)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   native: #00 pc 0034d971  /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   native: #01 pc 0032e131  /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+308)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   native: #02 pc 00237cad  /system/lib/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+848)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   native: #03 pc 00238243  /system/lib/libart.so (_ZN3art9JavaVMExt9JniAbortFEPKcS2_z+66)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   native: #04 pc 00331b59  /system/lib/libart.so (_ZNK3art6Thread13DecodeJObjectEP8_jobject+240)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   native: #05 pc 003f0bcb  /system/lib/libart.so (_ZN3art25JniMethodEndWithReferenceEP8_jobjectjPNS_6ThreadE+30)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   native: #06 pc 0046cbdb  /system/framework/arm/boot-framework.oat (Java_android_hardware_usb_UsbDeviceConnection_native_1request_1wait__+86)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   at android.hardware.usb.UsbDeviceConnection.native_request_wait(Native method)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   at android.hardware.usb.UsbDeviceConnection.requestWait(UsbDeviceConnection.java:272)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   at com.ximmerse.io.usb.JavaUsbStream.run(JavaUsbStream.java:196)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   at android.os.Handler.handleCallback(Handler.java:751)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   at android.os.Handler.dispatchMessage(Handler.java:95)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   at android.os.Looper.loop(Looper.java:154)
04-22 11:12:22.129  8084  8691 F art     : art/runtime/java_vm_ext.cc:470]   at android.os.HandlerThread.run(HandlerThread.java:61)

复制

参考链接

  1. 关于Android中so的符号表导出以及C++的符号改编规则
  2. Android下打印调试堆栈方法 
  3. Coredump介绍及如何在Android中开启和使用来分析Crash等问题,coredumpandroid

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊临时表

什么是临时表临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有两种类型:本地和全局。它们在名称、可见性以 及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是…

电脑不能开机维修_MacBook维修 苹果笔记本电脑进水不开机

最近有很多小伙伴来店里,是进水的Macbook苹果笔记本电脑开不开机、黑屏,有很多朋友认为Macbook进水后擦干,只要能开机就没事,实在不开机晾几天就会好了。其实不然。Macbook进水后晾干虽然能开机但有很多后遗症——比如忽然黑屏、反…

Linux Arch目录下处理器体系架构介绍

alpha 处理器 Alpha 处理器最早由美国DEC 公司设计制造,在Compaq (康柏)公司收购DEC 之后,Alpha 处理器继续得到发展,并且应用于许多高档的Compaq 服务器上,HP (惠普)收购的Compaq &…

前端和后端的英文_计算机专业的本科生在前端、后端、测试和运维之间该如何选择...

首先,对于计算机专业的同学来说,在选择发展方向的时候往往会遇到一些困惑,当前随着计算机技术体系的不断壮大,计算机领域的岗位分类也越来越细化,而且在新技术的推动下,还在不断出现新的岗位,比…

医学影像后处理技术超详细收藏版(上)

转自:医学影像后处理技术超详细收藏版(上) 导语: 医学图像后处理是通过综合运用计算机图像处理技术,医学知识,将由各种数字化成像技术所获得的人体信息按照一定的需要在计算机上表现出来,使之…

BulkLoader类使用

BulkLoader提供简单的载入函数,不管要载入的是xml、swf还是声音文件,都只使用同一接口。功能强大,十分推荐。 用法,载入xml文件: var bulkLoader:BulkLoader new BulkLoader(main loading);bulkLoader.add(my_xml_fil…

uboot 详细注释讲解

大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能&#xff0…

【转】VTK和ITK中的坐标系统

当我们在处理医学图像和应用时,一个问题就是坐标系统之间的不同。在图像应用中通常有三个坐标系,分别是世界坐标系,解剖坐标系和图像坐标系。 每种坐标系目的不同,呈现数据的方式也不一样。 解剖坐标系由三个平面组成,…

(ZT)在日本市场推广 iPhone 应用的经验

原贴:http://www.cocoachina.com/appstore/market/2010/0728/1942.html 本文作者为 CocoaChina 会员 “lawrencewu”,是一位专攻日本市场的 iPhone 开发者。他的10款 App (9个收费,一个免费)在9个月的时间里已经取得了…

嵌入式系统 Boot Loader 技术内幕

1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入…

互联网医院 2020年突出成就_【关注】中国社科院发布2020中国医院互联网影响力排行榜...

导 读:11月4日,中国社科院健康业发展研究中心联合好大夫在线,发布2020中国医院互联网影响力排行榜,这是该榜单连续第5年发布。中国社科院健康业发展研究中心以好大夫在线平台611.6亿次的患者浏览轨迹、6648万患者的在线问诊记录、4.7亿次医…

集合附加属性(HACK)

传说中的HACK… 靠看文档是不知道的 http://wekempf.spaces.live.com/blog/cns!d18c3ec06ea971cf!468.entry?wawsignin1.0&sa837408022 http://blogs.msdn.com/b/johngossman/archive/2008/07/28/how-to-initialize-an-attached-dependencyproperty-of-type-collection.as…

h5链接加上 vconsole_又出爆款!凯美瑞和红旗H5没法比!

论舒适性而言,三厢版车型的优势还是十分明显的。基本可以满足日常商务用途和家用等多种用车环境。今天带来的两款车都是三厢车,分别是红旗H5和宝马1系。那这两款车究竟是骡子是马,还是让大家一起来看看它们的实际表现吧。车型:红旗…

程序员:如何写出杀手级简历

1. 简历里要有你工作的技术细节: 编程语言,你的个人成就和水平。 我有时会看到一些简历,里面的工作描述就只有一行话,像这样: * 在一个3人组成的团队里开发一个 e-mail 插件。筛选者在阅读你的简历时心里都有选择标准&…

HDOJ 1010 HDU 1010 Tempter of the Bone ACM 1010 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋题目地址:http://acm.hdu.edu.cn/showproblem.php?pid1010 题目描述:代码Tempter of the BoneTime Limit: 2000/1000MS (Java/Others) Memory Limit: 65536/32768K (Java/Others)Total Submission(s): 16817Accepted …

console application_灵活使用 console 让 js 调试更简单

摘要: 玩转console。原文:灵活使用 console 让 js 调试更简单作者:前端小智Fundebug经授权转载,版权归原作者所有。Web 开发最常用的高度就是 console.log ,虽然 console.log 占有一席之地,但很多人并没有意…

交易机项目工作日志--2013-3-3

今天的主要任务是给板子烧程序。烧了将近100块,发现一些问题。 1. usb otg 不好用,将usb线查到机箱后面的usb后,且让板子上的插头舒展开后,依然不好使,发现是核心板虚焊造成的,核心板和底板不平。 2. usb…

《C#本质论》读书笔记(十二)构造器 @ Lennon

在C#里,很多人可能对属性这个概念很熟悉,平时属性是最常用到的.而我们很少会去用到构造器.而且很多人对构造器的一些概念还不是很熟悉,也有人认为属性等同于构造器.今天在这里谈谈构造器的声明.构造器重载.默认构造器.构造器与属性的区别等.. 构造器的声明 classEmployee {publ…

a byte of python中文版_面试官问 Python 版 “垃圾回收”机制,我没答上来

点击“开发者技术前线”,选择“星标?”13:21 在看|星标|留言, 真爱选自《萌萌哒的柯基》 作者:heroyfhttps://www.heroyf.club/2019/10/23/python_gc/前言对于python来说,一切皆为对象,所有的变量赋值都遵循着对象引…