Unity 之 安卓堆栈跟踪和日志工具 (Android Logcat | 符号表解析Bugly捕获)

news2024/11/29 8:43:52

Unity 之 日志解析工具 Android Logcat

  • 一,工具集成
    • 1.1 注意事项
    • 1.2 导入插件
  • 二,连接设备
    • 2.1 使用USB连接
    • 2.2 无线连接
  • 三,实用功能介绍
    • 3.1 通用介绍
    • 3.2 堆栈跟踪工具 -- 解析Bugly捕获报错

一,工具集成

Logcat是开发者必备的工具,调试app时的闪退,异常,等问题都可以在这里看到。

Android Logcat包是在Unity Editor中显示来自Android设备的堆栈跟踪和日志等消息。


1.1 注意事项

Android Logcat软件包需要Unity 2019.4或更高版本以及Android支持模块。需要添加Android模块:

导入前需要注意:确保你的工程已加载Android模块,并且可以切到Android平台。

确认后在“build Settings”窗口中切换到Android构建目标。


1.2 导入插件

在Package Manager(Window” --> PackageManager)界面中导入:

插件简介:

Android Logcat软件包支持:

  • Android:日志消息

  • Android:应用程序内存统计

  • Android:屏幕捕获

  • Android:屏幕记录器

  • Stacktrace:实用程序

可以通过“Window > Analysis > Android Logcat ”在Unity Editor中访问该窗口。

窗口打开快捷键:Windows 按“Alt+6”;macOS “Option+6”


二,连接设备

Android Logcat软件包支持USB和无线连接。本节介绍如何将Android设备连接到Android Logcat窗口。

2.1 使用USB连接

当您打开Android Logcat窗口时,Unity会自动将任何USB连接的Android设备添加到设备列表中。

手机连接上USB之后,需要选择:传输文件。若没有此选项,则需要打开开发者模式。

PS: 在手机版本上多次点击才可以唤醒出开发者模式,再次点击则有吐司提示您已处于开发者模式,这时再去更多设置中去找开发者模式并开启即可。

检测上之后,即可在窗口中看到实时日志了:


2.2 无线连接

要将Android设备连接到Android Logcat窗口:

无线连接,还是得先使用2.1方式使用USB链接一下,然后打开Android Logcat窗口,从工具栏中,选择“设备选择器”。

选择其他连接选项:

在打开的窗口中,找到对应设备点击Connect:

连接成功提示:(不使用USB方式链接,直接输入IP地址,总是链接失败,不知道为什么[\疑惑])

连接成功后,拔掉USB连接,就可以在可用设备窗口,找到Wifi链接的了:

PS:一次只能连接到一个设备。要选择要连接的设备,请使用Android Logcat窗口中的设备列表。此列表包含已连接设备的设备ID。

可以看到实时日志了:

若需要断开连接,可以在连接窗口对应设备后点击“Disconnect”:

再次连接,直接点最下面的Connect链接,即可链接成功。


三,实用功能介绍

3.1 通用介绍

  1. 筛选包名查看日志
    点击No Filter,在弹出的下拉菜单中,即可选择当前运行应用的包名,进行查看当前应用的相关日志:

  2. 筛选日志信息
    Logcat工具支持在搜索框输入正则表达式检索和区分大小写功能:

  3. Reconnect重新连接,Disconnect断开链接
    当我们出现一个问题,需要查看日志时,为了防止日志太多将需要查看的日志刷过去,则可以点击Disconnect断开链接,停止捕获更新日志信息。需要再次查看日志时,点击Reconnect重新连接。


3.2 堆栈跟踪工具 – 解析Bugly捕获报错

Tools下拉菜单下选择Stacktrace Utility 可以打开工具面板:

准备工作:指定符号表)

Project Setting面板 -> Analysis -> Android Logcat Settings 中设置:

PS:打包时用的哪个就导入哪个,看你打包时的工程设置:Player -> Configuration

若不指定会在解析时报错提示:

At least one symbol path needs to be specified.
Click Configure Symbol Paths and add the necessary symbol path.

举个例子:解析Bugly捕获报错

操作步骤:复制Bugly报错到工具Original界面,然后点击Resolve Stacktraces 即可:

解析前日志:

at libunity.0x577cd8(Native Method)
at libunity.0x583bdc(Native Method)
at libunity.0x5844b8(Native Method)
at libunity.0x583870(Native Method)
at libunity.0x58380c(Native Method)
at libunity.0x1d9058(Native Method)
at libil2cpp.0x2bd4b20(Native Method)
at libil2cpp.0x2bd6008(Native Method)
at libil2cpp.0x278083c(Native Method)
at libil2cpp.0xb8dc68(Native Method)
at libil2cpp.0xb8dac8(Native Method)
at libunity.0x566cf4(Native Method)
at libunity.0x574f98(Native Method)
at libunity.0x581a0c(Native Method)
at libunity.0x5815e8(Native Method)
at libunity.0x583620(Native Method)
at libunity.0x583b44(Native Method)
at libunity.0x5844dc(Native Method)
at libunity.0x583870(Native Method)
at libunity.0x58380c(Native Method)
at libunity.0x1d9058(Native Method)
at libil2cpp.0x2bd4b20(Native Method)
at libil2cpp.0x2bd6008(Native Method)
at libil2cpp.0x278083c(Native Method)
at libil2cpp.0xb8dc68(Native Method)
at libil2cpp.0xb8dac8(Native Method)
at libunity.0x566cf4(Native Method)
at libunity.0x574f98(Native Method)
at libunity.0x581a0c(Native Method)
at libunity.0x5815e8(Native Method)
at libunity.0x583620(Native Method)
at libunity.0x583b44(Native Method)

解析后日志:

at libunity.0x577cd8 (ScriptingInvocation::ScriptingInvocation(ScriptingObjectPtr, ScriptingMethodPtr) at ??:?)(Native Method)
at libunity.0x583bdc (MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingExceptionPtr*) at ??:?)(Native Method)
at libunity.0x5844b8 (MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr) at ??:?)(Native Method)
at libunity.0x583870 (MonoBehaviour::StartCoroutine(char const*, ScriptingObjectPtr) at ??:?)(Native Method)
at libunity.0x58380c (MonoBehaviour::StartCoroutineManaged(char const*, ScriptingObjectPtr) at ??:?)(Native Method)
at libunity.0x1d9058 (MonoBehaviour_CUSTOM_StartCoroutineManaged(ScriptingBackendNativeObjectPtrOpaque*, ScriptingBackendNativeStringPtrOpaque*, ScriptingBackendNativeObjectPtrOpaque*) at ??:?)(Native Method)
at libil2cpp.0x2bd4b20 (__start_il2cpp at ??:?)(Native Method)
at libil2cpp.0x2bd6008 (__start_il2cpp at ??:?)(Native Method)
at libil2cpp.0x278083c (__start_il2cpp at ??:?)(Native Method)
at libil2cpp.0xb8dc68 (BrotliDecoderVersion at ??:?)(Native Method)
at libil2cpp.0xb8dac8 (BrotliDecoderVersion at ??:?)(Native Method)
at libunity.0x566cf4 (scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) at ??:?)(Native Method)
at libunity.0x574f98 (ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) at ??:?)(Native Method)
at libunity.0x581a0c (Coroutine::InvokeMoveNext(ScriptingExceptionPtr*) at ??:?)(Native Method)
at libunity.0x5815e8 (Coroutine::Run(bool*) at ??:?)(Native Method)
at libunity.0x583620 (MonoBehaviour::TryCreateAndRunCoroutine(ScriptingObjectPtr, ScriptingMethodPtr, Coroutine**) at ??:?)(Native Method)
at libunity.0x583b44 (MonoBehaviour::HandleCoroutineReturnValue(ScriptingMethodPtr, ScriptingObjectPtr) at ??:?)(Native Method)
at libunity.0x5844dc (MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr) at ??:?)(Native Method)
at libunity.0x583870 (MonoBehaviour::StartCoroutine(char const*, ScriptingObjectPtr) at ??:?)(Native Method)
at libunity.0x58380c (MonoBehaviour::StartCoroutineManaged(char const*, ScriptingObjectPtr) at ??:?)(Native Method)
at libunity.0x1d9058 (MonoBehaviour_CUSTOM_StartCoroutineManaged(ScriptingBackendNativeObjectPtrOpaque*, ScriptingBackendNativeStringPtrOpaque*, ScriptingBackendNativeObjectPtrOpaque*) at ??:?)(Native Method)
at libil2cpp.0x2bd4b20 (__start_il2cpp at ??:?)(Native Method)
at libil2cpp.0x2bd6008 (__start_il2cpp at ??:?)(Native Method)
at libil2cpp.0x278083c (__start_il2cpp at ??:?)(Native Method)
at libil2cpp.0xb8dc68 (BrotliDecoderVersion at ??:?)(Native Method)
at libil2cpp.0xb8dac8 (BrotliDecoderVersion at ??:?)(Native Method)
at libunity.0x566cf4 (scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) at ??:?)(Native Method)
at libunity.0x574f98 (ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) at ??:?)(Native Method)
at libunity.0x581a0c (Coroutine::InvokeMoveNext(ScriptingExceptionPtr*) at ??:?)(Native Method)
at libunity.0x5815e8 (Coroutine::Run(bool*) at ??:?)(Native Method)
at libunity.0x583620 (MonoBehaviour::TryCreateAndRunCoroutine(ScriptingObjectPtr, ScriptingMethodPtr, Coroutine**) at ??:?)(Native Method)
at libunity.0x583b44 (MonoBehaviour::HandleCoroutineReturnValue(ScriptingMethodPtr, ScriptingObjectPtr) at ??:?)(Native Method)

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

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

相关文章

ps,查看Linux系统进程信息小帮手-尚文网络xUP楠哥

~~全文共852字,阅读需约5分钟。 进Q群11372462,领取专属报名福利,包含云计算学习路线图代表性实战训练大厂云计算面试题资料! ps命令在Linux系统中非常的常用,主要是帮助我们查看系统进程的详细信息,其中,…

Jetson Nano如何安装 onnxruntime gpu Python包

Jetson Nano 可以直接 pip 安装 cpu 版本的 onnxruntime 用 pypi 的源,直接安装 onnxruntime-gpu 或者 onnxruntime_gpu 都会报找不到对应的架构 aarch64 本来以为要用官方库编译一下 https://github.com/microsoft/onnxruntime 幸运的是,NVIDIA官方帮…

地级市市场化指数+樊纲市场化指数(包含分省、市两份数据)

一、地级市市场化指数 1、数据来源:各省份年鉴以及地级市统计公报 2、时间跨度:1998-2020年 3、区域范围:422(城市和区) 4、指标说明: 依据樊纲市场化各指标,结合各地级市的相关数据算出来…

Typecho中handsome主题如何增加侧边导航栏

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

【心电信号】小波阙值心电信号去噪【含Matlab源码 2188期】

⛄一、小波阈值法去噪概述 电能质量扰动信号的噪声大多以高斯白噪声的形式存在,利用小波变换对信号进行多分辨率分解,由于小波变换具有去除数据相关性的特点,故可以将有用信号与噪声的能量分离开来。信号中有效的信息主要集中在较大的小波系…

【Vue】Vuex-store

Vuex是什么? Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据的共享。 像一个仓库一样! 使用Vuex统一管理状态的好处? 1.能够在vuex中集中管理共享的数据,易于开发和后期维护 2.能…

二叉查找树(1)-二叉树-数据结构和算法(Java)

文章目录1 前言1.1 二叉查找树定义1.2 二叉查找树的性质2 基本实现2.1 API2.2 实现代码2.2.1 数据表示2.2.2 查找2.2.3 插入3 分析4 有序性相关方法与删除操作4.1 最大键和最小键4.2 向上取整和向下取整4.2.1 向下取整floor()4.2.2 向上取整ceiling()4.3 选择select()4.4 排名r…

微服务框架 SpringCloud微服务架构 3 Eureka 3.1 提供者与消费者

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构3 Eureka3.1 提供者与消费者3.1.1 一些概念3.1.2 一个问题3.1.3 总结3 Eur…

【Hack The Box】linux练习-- Pit

HTB 学习笔记 【Hack The Box】linux练习-- Pit 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月27日🌴 🍭…

单片机如何控制外设?

单片机如何控制外设? 单片机不是直接控制外设的,而是通过配置片上外设寄存器来控制其输出和检测高低电平,进而控制外围器件。 单片机如何配置寄存器的? 下图是单片机驱动 点亮发光二极管 内核从flash里面加载读取指令。内核根据指…

将DataFrame中符合指定条件的数据替换为指定的值:mask()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将DataFrame中符合指定条件的数据 替换为指定的值:mask()函数 选择题 下列说法错误的是? import pandas as pd myDF pd.DataFrame({"A":[1,2,3], "B":[4,…

java EE初阶 — 如何进行多线程编程

文章目录1.java如何进行多线程编程1.1 最基础的多线程代码1.2 线程的优势2.java中创建线程的方法2.1 继承Thread 重写run2.2 实现Runnable 接口2.3 使用匿名的内部类,继承 Thread2.4 使用匿名类。继承 Runnable2.5 使用 Lambda 表达式(最简答、最推荐&am…

2000-2020年迪博上市公司内部控制指数

2000-2020年迪博上市公司内部控制指数 1、时间:2000-2020年 2、指标包括: 证券代码、证券简称、辖区、证监会行业、申万行业、内部控制指数、报告期 3、指标解释: 上市公司内部控制指数是结合国内上市公司实施内部控制体系的现状&#x…

java——电商购物平台

1.java编译环境的创建,与所需要用到的插件 (1) 选择的编译器为2022版本的intellij idea 首先新建一个空项目 同时,创建完之后,我们点击 文件 -> 项目结构 进入项目结构,点击项目,选择好你想要的jdk版本,若没有,可以在idea中下载,这里我使用openjdk-19, 点击模…

Python适合0基础菜鸟学吗

前言 经常有小伙伴问:Python适合0基础初学编程的人学吗?今天我们就来从Python的功能和特性方面看一下,Python是否能让新人快速上手。 1、非常适合。我觉得刚开始学编程,负担越少越好,应该尽快能做出东西来。刚开始学…

day02 linux常用命令

day02 linux 第一章 Linux常用命令 第一节 进程相关命令 1. 查看进程状态 1.1 命令的使用 ps命令是用于查看进程状态的命令,它常和e参数(对应单词entire,表示全部。具体指显示系统中全部的进程信息。),以及f参数(对应单词full-formate&a…

Node.js 入门教程 13 在 Node.js 中从命令行接收输入

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Node.js 入门教程13 在 Node.js 中从命令行接收输入13 在 Node.js 中从命令行接收输入 如何使 Node.js CLI 程序具有交互性? 从…

卡塔尔世界杯--程序员的诗和远方

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 卡塔尔世界杯–程序员的诗和远方 2022年卡塔尔世界杯(FIFA World Cup Qatar 2022)第二十二届世界杯足球赛,历史上首次在卡塔尔和中…

【学习笔记44】JavaScript的事件传播

JavaScript的事件传播一、事件传播1、事件传播的说明2、阻止事件传播二、目标冒泡捕获1、冒泡2、捕获三、事件委托1、事件委托的说明2、为什么要用事件委托四、阻止默认事件1、方法一2、方法二一、事件传播 在触发子元素的事件时, 会将行为传播给父级的同类型事件触发了子元素的…

机器学习1综述

文章目录一、综述学习环境:二、机器学习方法的分类1、监督学习;2、非监督学习;3、半监督学习;4、增强学习;三、机器学习方法分类2、批量学习(离线学习)Batch Learing;3、参数学习&am…