jjzjj

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

陈言必行 2024-01-04 原文

Unity 之 日志解析工具 Android Logcat

一,工具集成

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)

有关Unity 之 安卓堆栈跟踪和日志工具 (Android Logcat | 符号表解析Bugly捕获)的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  4. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  5. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  6. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  7. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  8. ruby - 如何让Ruby捕获线程中的语法错误 - 2

    我正在尝试使用ruby​​编写一个双线程客户端,一个线程从套接字读取数据并将其打印出来,另一个线程读取本地数据并将其发送到远程服务器。我发现的问题是Ruby似乎无法捕获线程内的错误,这是一个示例:#!/usr/bin/rubyThread.new{loop{$stdout.puts"hi"abc.putsefsleep1}}loop{sleep1}显然,如果我在线程外键入abc.putsef,代码将永远不会运行,因为Ruby将报告“undefinedvariableabc”。但是,如果它在一个线程内,则没有错误报告。我的问题是,如何让Ruby捕获这样的错误?或者至少,报告线程中的错误?

  9. ruby-on-rails - 无法在 Rails 助手中捕获 block 的输出 - 2

    我在使用自定义RailsFormBuilder时遇到了问题,从昨天晚上开始我就发疯了。基本上我想对我的构建器方法之一有一个可选block,以便我可以在我的主要content_tag中显示其他内容。:defform_field(method,&block)content_tag(:div,class:'field')doconcatlabel(method,"Label#{method}")concattext_field(method)capture(&block)ifblock_given?endend当我在我的一个Slim模板中调用该方法时,如下所示:=f.form_field:e

  10. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

随机推荐