Unity 符号表

news2024/9/20 16:58:07

目录

前言

关于Unity符号表

正文

程序crash日志:

解析

后记

记一次 Bugly 崩溃查找过程 unity-il2cpp:


前言

关于Unity符号表

        关于项目真机调试时的崩溃问题,一般可以 logcat xcode 看到相关的crash日志,拿到崩溃时的堆栈信息。但是 backtrace 中的地址信息并不直接可见(非debug版本的so库,并不包含符号表等调试信息),因此我们需要拿到对应的符号表,借助 ndk addr2line 工具(arm-linux-androideabi-addr2line.exe,具体须根据调试环境选择)来查看:


        这里主要说下unity的符号表:libunity/libmain——Unity5.3.6 开始的版本都有提供(unity的安装目录下)。

        个人开发主要在 win 平台,对应的符号表目录如下:

其中1为平台,2为后端(il2cpp、mono),3为release或develop

        注1:调试时,符号表版本须与打包APK的Editor版本一致;
        注2:addr2line usage:arm-linux-androideabi-addr2line -f -C -e libunity.sym.so %addr_lst%
-f- Show function names 
-C- Demangle function names 
-e- Set the input file name
        注3:cocos2dx亦然,没有单独的符号表文件,调试时使用debug版本的so库文件即可;
        注4:若crash的点在li2cpp,则需要关注其符号表——发出apk包中的libil2cpp.so不包含符号表,需要使用打包apk时自动生成的压缩包。


正文

程序crash日志:

        我们可以通过crash日志信息,查看程序crash在什么地方。

        在这份堆栈信息里,可以看到崩溃时的内存地址,例如0049b647这样的数字。每行的结尾则是所使用的库,例如:libunity.so

        在Unity 5.3.6之后的版本,Unity提供了libunity.so的符号表。


解析

        OK,万事俱备,我们接下来就来解析一下第一条内存地址所对应的方法。

        可以看到crash的方法是三变量的一个方法,如此,我们便可以去debug:

注意:调试so文件,需要使用对应的 addr2line 工具。 

32-bits
 NDK \ toolchains \ arm-linux-androideabi-4.9 \ prebuilt \ windows-x86_64 \ bin \ arm-linux-androideabi- addr2line.exe

64-bits 
NDK \ toolchains \ aarch64-linux-android-4.9 \ prebuilt \ windows-x86_64 \ bin \ aarch64-linux-android- addr2line.exe

c# - Addr2line 64bit tool - Stack Overflowhttps://stackoverflow.com/questions/63709153/addr2line-64bit-tool


后记

记一次 Bugly 崩溃查找过程 unity-il2cpp:

Bugly 上面的崩溃,刚打开根本看不懂什么函数、什么堆栈...

1、 一开始想到的是把 il2cpp 的代码生成符号文件,上传到 bugly 但是找了一大圈,并没有 il2cpp 的符号文件,debug 版本的话 代码也不一样 毫无参考价值;

2、 就算是找到了符号表 也看不懂,il 代码变为 cpp 代码根本看不懂;

3、 开始根据堆栈尝试还原,因为是内存错误,首先想到的是无效指针,或者大内存分配失败,通过可以制造崩溃,然后看 bugly 的堆栈信息是否吻合,如果吻合那么就证明是这里的调用堆栈的问题了。然后查起来就容易多了;

4、崩溃堆栈起始是_pthread_startXXXX, 基本可以断定是我们开的线程里面出错,unity 主线程的话会是 UnityMain。

5、代码里面只有网络部分是自己开的线程,重点审查代码,var x = new byte [1024*1024*1024] 开始逐个可能造成内存错误的代码块插入上述测试代码,开始测试。

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

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

相关文章

Python均匀分布和三角形分布

文章目录均匀分布三角形分布均匀分布和三角形分布之间的关系函数备注triangular(left, mode, right)三角形分布uniform([low, high])均匀分布 均匀分布 所谓均匀分布,就是在事件空间中,所有事件的概率都是相等的连续分布,其概率密度为 f(x)1…

麻省理工人工智能实验室新研究!有远见的机器学习方法:能预知未来行为的AI智能体

原创/文 BFT机器人 近日,麻省理工学院的研究人员开发出一种新技术,让AI智能体能够思考更远的未来,寻找更合适的合作与竞争长期解决方案。 想象一个游戏规则:两支足球队在球场上PK,玩家们可以选择相互合作合作来实现目…

[附源码]Python计算机毕业设计Django学生宿舍管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

web前端期末大作业:云南旅游网页主题网站设计——云南城市旅游5页HTML+CSS+JavaScript

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

c + linux + cmake + arm + MQTT

先给你们看个最终代码结构吧,因为我改过的代码会加密,所以我只能放一部分源码,另外一部分源码我会直接贴在博客,具体使用我会在博客里面说明! 1.MQTTPacket源码库(MQTTPacket源码地址) 2.MQTTClient.c /*********************************************************************…

Linux中线程池的制作

一.介绍 1.1概念 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用&#x…

如何从github上克隆库、跑库

第一步:在Github上找到想要的库,以YOLOv3项目为例。 第二步:拷贝这个库到自己的电脑上,下载到本地。 方法一:在GitHub上,Code -> Download ZIP(有的时候会有一些问题,不建议&…

DBW*的trace文件过大的bug

问题描述: 近期某现场发现trace目录下的dbw*文件达到了大几G的大小导致/oracle目录占用率突增,删除这些trace文件,几天后又重新生成较大的dbw*的trace 11G Dec 4 10:38 rb_dbw0_2086848.trc 3.6G Dec 4 10:38 rb_dbw1_2086852.trc 4.4G De…

前端工程师常考手写面试题指南

实现 add(1)(2)(3) 函数柯里化概念: 柯里化(Currying)是把接受多个参数的函数转变为接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。 1)粗暴版 function add (a) { return function (b) …

码云线上误删主项目文件夹的恢复

码云线上误删主项目文件夹的恢复前言描述解决办法解决问题前言描述 本来某个项目即将上线,然后同事不知道怎么的,直接打开了自己的码云,在网站上把主项目目录删除了。。。。是的,删除了!!!&…

职场生涯亮红灯要注意这些

很多时候,当事业变红的时候,很多年轻人还在傻傻地工作。他们做的事情越多,在不被领导看重的情况下,就越不会得到领导的重用。在关心下属的时候,会在无形中释放出一些不好的信号,这是一种被领导抛弃的行为。…

winform 处理tabcontrol控件,隐藏顶部的tab标签,及tabcontrol的边框线

处理tabcontrol控件,隐藏顶部的tab标签,及tabcontrol的边框线处理tabcontrol控件,隐藏顶部的tab标签,及tabcontrol的边框线隐藏顶部的tab标签隐藏边框线运行效果图处理tabcontrol控件,隐藏顶部的tab标签,及…

智能电销机器人《各版本机器人部署》

科技在进步,时代在发展,越来越多人工智能产品出现在我们的生活中,从各种工业机器人到智能家居产品,人工智能在越来越多的行业出现,代替人们做重复枯燥的工作。在企业中出现最多的是电销机器人,并逐渐被越来…

【面试宝典】Mysql面试题大全

mysql面试题大全1、数据库存储引擎2、InnoDB(B树)3、TokuDB( Fractal Tree-节点带数据)4、MyIASM5、Memory6、InnoDB与MyISAM的区别7、索引8、常见索引原则有9、数据库的三范式是什么10、第一范式(1st NF - 列都是不可再分)11、第二范式(2nd NF- 每个表只描述一件事情)12、第三…

MemoryAnalyzer分析线上OOM异常

本文档记录工作中发生的一次OOM异常分析 最近线上环境频繁出现OOM异常,导致应用服务器宕机,之前有观察过最近的程序更新,猜测定位到最近的一个接口上,之前发现问题都是打印堆栈信息排查,但是这次发现堆栈信息并不能有…

lc刷题总结(二叉树第一次)

前中后序的递归遍历 lc144 94 145 class Solution { public:void travel(TreeNode * cur,vector<int>& vec){if(curnullptr){return;}travel(cur->left, vec);travel(cur->right, vec);vec.push_back(cur->val);}vector<int> postorderTraversal(Tre…

视频点播小程序毕业设计,视频点播系统设计与实现,微信小程序毕业设计论文怎么写毕设源码开题报告需求分析怎么做

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序视频点播系统&#xff0c;前台用户使用小程序&#xff0c;后台管理使用基java&#xff08;springboot框架&#xff09;msyql8数据库的B/S架构&#xff1b;通过后台添加课程信息、视频信息等&a…

Spring Cloud(十五):微服务自动化部署 DevOps CI/CD、Maven打包、ELK日志采集

DevOps CI/CD Gitlab(免费版和收费版)Jenkins基于GitLabJenkins快速实现CI\CD 后端项目打包以及部署方式 spring-boot-maven-pluginmaven-dependency-pluginmaven 官网插件maven-jar-plugin上传jar包到maven私服 ELK 日志采集 使用FileBeatLogstashES实现分布式日志收集使用 ma…

使用握手信号实现跨时钟域数据传输(verilog)

大家好&#xff0c;最近汇总了2021年oppo哲库招聘手撕代码题目&#xff0c;本文章一共含有以下几个题目&#xff1a; 一&#xff0c;使用握手信号实现跨时钟域数据传输&#xff08;verilog&#xff09; 二&#xff0c;自动售卖机&#xff08;verilog&#xff09; 三&#xf…

Jenkins执行shell脚本报错:bash: kubectl: command not found

问题描述 搭建好Jenkins之后&#xff0c;通过shell脚本构建k8s应用&#xff0c;但是脚本报错&#xff1a; bash: kubectl: command not found网上找了很多解决办法都不正确&#xff0c;并不适用于我的问题。 先说明&#xff0c;我的Jenkins和k8s各自独立的&#xff0c;不在同…