[√]android 崩溃排查

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: [√]android 崩溃排查

使用雷电模拟器的崩溃日志

06-27 17:33:42.612 3351-3351/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
06-27 17:33:42.612 3351-3351/? A/DEBUG: Build fingerprint: 'samsung/star2qltezh/star2qltechn:9/PQ3B.190801.06161913/G9650ZHU2ARC6:user/release-keys'
06-27 17:33:42.612 3351-3351/? A/DEBUG: Revision: '0'
06-27 17:33:42.612 3351-3351/? A/DEBUG: ABI: 'x86'
06-27 17:33:42.612 3351-3351/? A/DEBUG: pid: 3236, tid: 3260, name: GLThread 41  >>> com.caohua.tank5 <<<
06-27 17:33:42.612 3351-3351/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8
06-27 17:33:42.612 3351-3351/? A/DEBUG: Cause: null pointer dereference
06-27 17:33:42.612 3351-3351/? A/DEBUG:     eax efb90200  ebx 0db56a50  ecx 04cd7198  edx 00000198
06-27 17:33:42.612 3351-3351/? A/DEBUG:     edi 04cd71ac  esi d5f673e4
06-27 17:33:42.612 3351-3351/? A/DEBUG:     ebp d9686000  esp d5f673d8  eip 0db56ac7
06-27 17:33:42.620 3351-3351/? A/DEBUG: backtrace:
06-27 17:33:42.620 3351-3351/? A/DEBUG:     #00 pc 008caac7  [anon:Mem_0x20000000:0d28c000]
06-27 17:33:42.868 1464-1464/? E//system/bin/tombstoned: Tombstone written to: /data/tombstones/tombstone_01

原因是空指针导致的崩溃,backtrace的信息非常少,更详细的日志写在了tombstoned

tombstones

Tombstone(墓碑)是指在Android系统中的应用程序崩溃或发生严重错误时生成的一种日志文件。这个文件包含了导致应用程序崩溃的堆栈跟踪信息以及其他相关调试信息,类似于传统操作系统中的核心转储文件。

当一个应用程序遇到严重错误时,Android系统会自动将应用程序的状态保存到一个特殊的日志文件中,这个文件通常被称为"tombstone"。该文件的命名约定通常是"tombstone_pid",其中"pid"代表进程ID。

Tombstone文件对于开发者和系统维护人员非常有用,因为它们提供了关于应用程序崩溃原因的信息,包括错误栈轨迹、内存状态和寄存器内容等。这些信息可以帮助开发者进行调试和分析,并最终解决应用程序中的问题。

root权限

adb root
# 在正式发布(production builds)的Android设备上,adbd(Android Debug Bridge Daemon)无法以root权限运行。
# adbd cannot run as root in production builds
adb shell
suX
# /system/bin/sh: suX: not found # suX" 通常是指用于获取 root 权限的 su 命令的名称。

cocos2dx的Android writablePath

activity.getFilesDir().getAbsolutePath()

/data/user/0/com.caohua.tank5/files/7.png

activity.getFilesDir().getAbsolutePath() 是一种获取应用程序内部文件目录绝对路径的方法。在Android中,每个应用都有一个私有的内部存储区域,用于存储特定于应用的文件。

如果你在Android的Java代码中使用 activity.getFilesDir().getAbsolutePath() 这行代码,它将返回当前活动(Activity)的文件目录的绝对路径。

例如,如果你在MainActivity中调用 getFilesDir().getAbsolutePath(),它将返回类似于 /data/user/0/com.example.myapp/files 的字符串,其中 com.example.myapp 是你的应用程序的包名。

通过这个路径,你可以在应用程序的内部存储目录中创建、读取和写入文件。请注意,这个目录是应用程序私有的,其他应用程序不能直接访问其中的文件。

拉取日志

记得在本地新建一个log.txt文件

adb pull  /data/tombstones/tombstone_01 e:/log.txt
remote open failed: Permission denied # 权限不足

雷电模拟器开启root权限

image.png

Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]

使用AS自动运行时会在app\build\outputs\apk\debug文件夹下自动生成测试APK:app-debug.apk,

adb -s 192.168.1.33:6666 install -t client_tank2018-debug.apk

如果是debug,tombstone会自动解析符号地址

2023-06-28 13:40:13.051 958-1037/? D/AAL: DRECurveCalculation: BLKNUM = 16 8
2023-06-28 13:40:13.085 25519-25519/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2023-06-28 13:40:13.085 25519-25519/? A/DEBUG: Build fingerprint: 'Redmi/begonia/begonia:11/RP1A.200720.011/V12.5.6.0.RGGCNXM:user/release-keys'
2023-06-28 13:40:13.085 25519-25519/? A/DEBUG: Revision: '0'
2023-06-28 13:40:13.085 25519-25519/? A/DEBUG: ABI: 'arm'
2023-06-28 13:40:13.086 25519-25519/? A/DEBUG: Timestamp: 2023-06-28 13:40:13+0800
2023-06-28 13:40:13.086 25519-25519/? A/DEBUG: pid: 24908, tid: 25103, name: GLThread 3970  >>> com.caohua.tank5 <<<
2023-06-28 13:40:13.086 25519-25519/? A/DEBUG: uid: 10683
2023-06-28 13:40:13.086 25519-25519/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8
2023-06-28 13:40:13.086 25519-25519/? A/DEBUG: Cause: null pointer dereference
2023-06-28 13:40:13.086 25519-25519/? A/DEBUG:     r0  d58b0700  r1  b4be9c68  r2  00000000  r3  00000000
2023-06-28 13:40:13.087 25519-25519/? A/DEBUG:     r4  c34ba7b0  r5  c34ba7b0  r6  c58e72cc  r7  c58e7d20
2023-06-28 13:40:13.087 25519-25519/? A/DEBUG:     r8  c58e71c0  r9  b3d795b8  r10 b3d79658  r11 c3fc82f4
2023-06-28 13:40:13.087 25519-25519/? A/DEBUG:     ip  f203cd28  sp  c3fc82e8  lr  c2a303fc  pc  c2a328bc
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG: backtrace:
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG:       #00 pc 01af18bc  /data/app/~~d59rE-S_fPA-H35nINL-Eg==/com.caohua.tank5-UuvUKfjmvb4VWf2JTLZJBQ==/lib/arm/libcocos2dlua.so (cocos2d::TextureCache::updateTex(cocos2d::TexInfo*)+112) (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773)
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG:       #01 pc 01aef3f8  /data/app/~~d59rE-S_fPA-H35nINL-Eg==/com.caohua.tank5-UuvUKfjmvb4VWf2JTLZJBQ==/lib/arm/libcocos2dlua.so (cocos2d::TextureCache::addImage(std::string const&, bool)+360) (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773)
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG:       #02 pc 0194ccfc  /data/app/~~d59rE-S_fPA-H35nINL-Eg==/com.caohua.tank5-UuvUKfjmvb4VWf2JTLZJBQ==/lib/arm/libcocos2dlua.so (cocos2d::SpriteFrameCache::addSpriteFramesWithDictionary(std::unordered_map<std::string, cocos2d::Value, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, cocos2d::Value> > >&, std::string const&)+1608) (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773)
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG:       #03 pc 0194d304  /data/app/~~d59rE-S_fPA-H35nINL-Eg==/com.caohua.tank5-UuvUKfjmvb4VWf2JTLZJBQ==/lib/arm/libcocos2dlua.so (cocos2d::SpriteFrameCache::addSpriteFramesWithFile(std::string const&, std::string const&)+460) (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773)
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG:       #04 pc 00deb858  /data/app/~~d59rE-S_fPA-H35nINL-Eg==/com.caohua.tank5-UuvUKfjmvb4VWf2JTLZJBQ==/lib/arm/libcocos2dlua.so (lua_cocos2dx_SpriteFrameCache_addSpriteFramesWithFile(lua_State*)+488) (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773)
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG:       #05 pc 01348b3c  /data/app/~~d59rE-S_fPA-H35nINL-Eg==/com.caohua.tank5-UuvUKfjmvb4VWf2JTLZJBQ==/lib/arm/libcocos2dlua.so (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773)
2023-06-28 13:40:13.110 25519-25519/? A/DEBUG:       #06 pc 0133b5c5  /data/app/~~d59rE-S_fPA-H35nINL-Eg==/com.caohua.tank5-UuvUKfjmvb4VWf2JTLZJBQ==/lib/arm/libcocos2dlua.so (lua_pcall+20) (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773)
2023-06-28 13:40:13.102 958-1037/? I/chatty: uid=1000(system) AALMain identical 3 lines
2023-06-28 13:40:13.118 958-1037/? D/AAL: DRECurveCalc
  • #00:表示当前堆栈帧的索引。这是最顶层的帧,也就是产生错误的位置。
  • pc:表示程序计数器(program counter)寄存器的值,即当前执行的指令地址。
  • 01af18bc:对应的十六进制值,表示代码中的偏移地址。这里是 libcocos2dlua.so 库中 TextureCache::updateTex(cocos2d::TexInfo*) 函数的地址。
  • /data/app/~~u0cw6VTEcvvVwuilHTgrXA==/com.caohua.tank5-oVeVZMdHoyTINDKDKL8N0A==/lib/arm/libcocos2dlua.so:显示出错的动态链接库(Shared Library)的文件路径。在这个例子中,显示的是 libcocos2dlua.so 库的路径。
  • (cocos2d::TextureCache::updateTex(cocos2d::TexInfo*)+112):表明具体发生错误的函数名称,即 TextureCache::updateTex(cocos2d::TexInfo*),并且在该函数内部的偏移量是 112。
  • (BuildId: 615fea86dbd6026e7ee929f87835acdc828c2773):显示库的构建 ID,用于标识特定版本的库。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5月前
|
开发工具 Android开发 开发者
Android Studio中两个让初学者崩溃菜单
Android Studio中两个让初学者崩溃菜单
54 0
|
4月前
|
消息中间件 Android开发 开发者
🔍深度剖析Android内存泄漏,让你的App远离崩溃边缘,稳如老狗!🐶
【7月更文挑战第28天】在 Android 开发中,内存管理至关重要。内存泄漏可悄无声息地累积,最终导致应用崩溃或性能下滑。它通常由不正确地持有 Activity 或 Fragment 的引用引起。常见原因包括静态变量持有组件引用、非静态内部类误用、Handler 使用不当、资源未关闭及集合对象未清理。使用 Android Studio Profiler 和 LeakCanary 可检测泄漏,修复方法涉及使用弱引用、改用静态内部类、妥善管理 Handler 和及时释放资源。良好的内存管理是保证应用稳定性的基石。
78 4
|
编译器 Android开发
深度解读Android崩溃日志案例分析1:so崩溃
深度解读Android崩溃日志案例分析1:so崩溃
322 1
|
缓存 Android开发 C++
[√]Android平台ParticleSystem内存泄露的排查过程
[√]Android平台ParticleSystem内存泄露的排查过程
74 1
|
安全 Java 编译器
[√]Android内存泄露排查
[√]Android内存泄露排查
93 0
|
存储 移动开发 数据库
安卓mpaas项目崩溃后本地存储的数据被清除的原因
安卓mpaas项目崩溃后本地存储的数据被清除的原因
114 2
|
监控 Java API
❤️Android 应用崩溃?嗯?莫慌,稳住!❤️
从刚开始接触Android开发,第一次发版,遇到程序崩溃,那就一个慌张。好几年过去了,现在的听到程序崩溃?嗯,稍等我看看什么问题,然后该锁定该锁定该解决解决。 发版前减少bug、崩溃等,发版后遇到bug、崩溃也不要慌张,毕竟 bug不 会因为你的慌张而自动修复对吧?要以最快的速度解决(解决问题同样是能力的体现),并说明问题轻重,看看是直接发版还是坐等下次。同时,吸取教训避免同样问题发生。 今天咱们就聊聊Android程序闪退。一个应用的崩溃率高低,决定了这个应用的质量。
722 0
❤️Android 应用崩溃?嗯?莫慌,稳住!❤️
|
Android开发 C语言
[笔记]安卓 使用breakpad定位崩溃问题
[笔记]安卓 使用breakpad定位崩溃问题
105 0
DHL
|
存储 安全 算法
Android 12 已来,你的 App 崩溃了吗?
Android 12 已来,你的 App 崩溃了吗? 我们已经开始做 Android 12 的适配了,在 Android 12 中包含了很多的功能和一些行为的变更,接下来我们一起来分析这些行为的变更对我们的应用产生了那些影响。
DHL
412 0
Android 12 已来,你的 App 崩溃了吗?
|
Java 开发工具 Android开发
【错误记录】Android NDK 错误排查记录 ( Could not get version from cmake.dir path ‘xxx\cmake\3.6.4111459‘. )
【错误记录】Android NDK 错误排查记录 ( Could not get version from cmake.dir path ‘xxx\cmake\3.6.4111459‘. )
413 0
【错误记录】Android NDK 错误排查记录 ( Could not get version from cmake.dir path ‘xxx\cmake\3.6.4111459‘. )