Unity崩溃后信息结合符号表来查看问题

目录

  • SO文件
    • 符号表
    • 对调试和分析的重要性
      • 调试方面
      • 分析方面
  • 错误数据
  • 安装Logcat
  • 解释符号表
    • 设置符号文件路径
    • 生成解析
  • 相关参考

SO文件

so 文件(Shared Object File,共享目标文件)和符号表紧密相关,它们在程序的运行、调试和分析过程中扮演着不同但又相互配合的角色。

符号表

符号表是.so 文件的关键辅助信息:.so 文件包含了可执行代码、数据以及其他相关信息,是程序在运行时动态链接和加载的对象。符号表则存储了.so 文件中函数、变量等符号的相关信息,如名称、类型、地址等。在程序运行时,动态链接器需要借助符号表来解析.so 文件中函数和变量的引用。例如,当一个程序调用.so 文件中的某个函数时,动态链接器通过符号表找到该函数在.so 文件中的实际地址,从而实现正确的函数调用,确保程序能够顺利运行。

对调试和分析的重要性

调试方面

在调试包含.so 文件的程序时,符号表不可或缺。调试器(如 GDB、IDA 等)利用符号表将程序运行时产生的地址信息(如栈回溯中的函数地址)转换为有意义的函数名和代码行号。对于 Unity 开发中出现问题的.so 文件(如日志中涉及的libil2cpp.so和libunity.so),通过符号表,开发人员可以快速定位到问题函数所在的源文件位置,查看函数参数和局部变量的值,便于分析程序出错的原因,提高调试效率。

分析方面

在进行性能分析或逆向工程分析时,符号表能帮助分析人员理解.so 文件的内部结构和功能。性能分析工具可以借助符号表将性能数据(如函数执行时间、调用次数)与具体的函数名关联起来,确定性能瓶颈所在。在逆向工程中,虽然符号表会增加一定的分析难度,但对于开发者自身分析代码逻辑、发现潜在安全漏洞也有帮助,同时在代码混淆时,符号表可配合保留关键信息,辅助后续的必要分析。

错误数据

举例说明
在查看Unity打包的日志看到崩溃日志信息,其中一段是这样的。

在这里插入图片描述

这些 native: #00 pc xxxxx 地址对应的函数不知道是什么,其实我们的Unity就可以看,我们需要安装一个Unity Android Logcat包。

安装Logcat

我们点击Unity、Window、Package Manager,打开包管理器安装Android Logcat
在这里插入图片描述
安装好之后在菜单的Window、Analysis、Android Logcat打开
在这里插入图片描述
通常我们连接安卓设备可以查看设备的Logcat,不用专门开Android Studio。

这个工具还可以解释符号表。

解释符号表

在这里插入图片描述
我们通过右上角Stacktrace打开。
Original的内容里,你可以把崩溃数据复制上来。
在这里插入图片描述

设置符号文件路径

右边的Configure Symbol Paths里你可以添加你生成apk时候生成的symbols文件,通常是libil2cpp.so文件。
在这里插入图片描述

这个文件通常在打包apk的时候生成,如果是Unity里打包可以勾选生成symbols.zip
在这里插入图片描述
打包结束后可以看到压缩文件夹,解压后可以看到so文件。
在这里插入图片描述

生成解析

最后我们点击Resolve Stacktraces按钮就解释了
在这里插入图片描述
这样就可以看到调用了什么函数了,方便我们能够锁定问题。

相关参考

https://docs.unity3d.com/6000.0/Documentation/Manual/android-symbols.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mapbox进阶,添加绘图扩展插件,裁剪线

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…

DeepSeek:从入门到精通

在人工智能飞速发展的今天,DeepSeek作为一款备受瞩目的AI工具,正以其强大的功能和开源理念改变着我们的生活和工作方式。本文将带你深入了解DeepSeek,从基础入门到进阶应用,助你快速掌握这一前沿工具。 文末有详细资料可下载 文末…

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面

【清晰教程】本地部署DeepSeek-r1模型-CSDN博客 目录 安装Docker 配置&检查 Open WebUI 部署Open WebUI 安装Docker 完成本地DeepSeek-r1的部署后【清晰教程】本地部署DeepSeek-r1模型-CSDN博客,通过Docker为本地DeepSeek-r1部署WebUI界面。 访问Docker官…

八、OSG学习笔记-

前一章节: 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码: OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…

在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.20.2

文章目录 1. 安装 nvm(如果还没有安装的话)2. 加载 nvm 配置3. 列出特定系列的 Node.js 版本(远程):4. 安装 Node.js 16.20.25. 使用指定版本的 Node.js6. 验证安装 在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.…

物联网水质监测系统设计与实现/基于STM32的水产养殖云监控系统设计

背景 随着物联网技术的飞速发展,各行各业都在逐步实现智能化管理,水质监测系统作为环境监测中的一个重要环节,近年来备受关注。如何高效、精准地监测水质,尤其是在远程无法到达的地方,成为了一个迫切需要解决的问题。…

SAP Smartforms 货币和数量字段设置参考及格式,消息号是SSFCOMPOSER601

SAP Smartforms 货币和数量字段设置参考及格式,消息号是SSFCOMPOSER601 在开发SAP Smartforms 时,会遇到设置打印的货币字段或数量字段在打印预览时无法显示报错(消息号是SSFCOMPOSER601,提示参考字段IS_DATA-GESME在表格中未知&…

Hbuildx开发的小程序,运行到微信开发者工具后,显示空白报错Pages not been registered yet,解决方法

问题描述: Hbuildx开发的小程序,运行到 微信开发者工具后,显示空白 报错Pages not been registered yet 解决方法: 1.检查报错的这个pages页面 ,实际是否存在。 2.路由文件中是否定义了该pages页面。 3.路由文件中…

稀疏计算的软硬件协同:FPGA有力推动硬件发展

稀疏计算协同:FPGA驱动进步 ©作者|wcychuiyuw 来源|神州问学 引言 在当今科技飞速发展的时代,端侧算力的重要性日益凸显,其中 ASIC (专用集成电路) 和 SoC 架构 (System on Chips) 成为端侧算力不可或缺的重要组成部分。它们以其独特的…

Cell子刊《Patterns》最新综述:大语言模型Attention Heads的可解释性研究

自从大语言模型(LLMs)在各种任务中展现出卓越性能以来,其内部机制的解读已经成为领域内的热门话题。尽管许多研究人员从各个方面做出了尝试并得到了一些结论,但现阶段仍缺乏一个全面的视角来对现有成果进行系统化的归纳与总结。 为…

【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇 概念Java特点Java为什么跨平台JVM、JDK、JRE关系 面向对象什么是面向对象,什么是封装继承多态?多态体现的方面面向对象设计原则重载重写的区别抽象类和实体类区别Java抽象类和接口的区别抽象类可以被实例化吗 深拷贝浅拷…

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略,早在2024年5月,推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体,为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来,亚信安全人工智能实验室利…

Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用

Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用 在 Flutter 里,Key 对象存在的目的主要是区分和维持 Widget 的状态,它是控件在渲染树里的「复用」标识之一,这一点在之前的《深入 Flutter 和 Compose 在 UI 渲染刷新时…

Vulhub靶机 openfire(CVE-2023-32315)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 二、访问靶机IP 9090端口 1、利用bp,抓取当前页面的包,并修改get请求如下 /setup/setup-s/%u002e%u002e/%u002e%u002e/user-groups.jsp 获取到JSESSIONID和csrf的值 2、拿到…

LogicFlow自定义节点:矩形、HTML(vue3)

效果: LogicFlow 内部是基于MVVM模式进行开发的,分别使用preact和mobx来处理 view 和 model,所以当我们自定义节点的时候,需要为这个节点定义view和model。 参考官方文档:节点 | LogicFlow 1、自定义矩形节点 custo…

python卷积神经网络人脸识别示例实现详解

目录 一、准备 1)使用pytorch 2)安装pytorch 3)准备训练和测试资源 二、卷积神经网络的基本结构 三、代码实现 1)导入库 2)数据预处理 3)加载数据 4)构建一个卷积神经网络 5&#xff0…

基于Ollama安装deepseek-r1模型搭建本地知识库

大模型 安装Ollama使用win系统安装使用sh脚本安装使用docker安装 下载大模型搭建本地知识库安装Dify对比参数模型 本实验主要使用win系统安装ollama部署deepseek-r1(1.5b、7b、8b、14b、32b等参数)并搭建本地知识库(个人学习研究为主&#xf…

【R语言】t检验

一、基本介绍 t检验(t-test)是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式: t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…

Uniapp 原生组件层级过高问题及解决方案

文章目录 一、引言🏅二、问题描述📌三、问题原因❓四、解决方案💯4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结&#x1f38…