使用雷电模拟器的崩溃日志
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权限
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,用于标识特定版本的库。