当前位置: 首页 > news >正文

android NDK 报错日志解读和还原报错方法名

Android NDK 的报错日志通常是

Process name is com.exemple.test, uid is 10293, not key_process
08-06 13:50:08.211 11744 11744 F DEBUG   : keyProcess: 0
08-06 13:50:08.211 11744 11744 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-06 13:50:08.211 11744 11744 F DEBUG   : Build fingerprint: 'OPPO/PKB110/OP5A3DL1:16/BP22.250124.009/V.bb172a_115bea7_115bea6:user/release-keys'
08-06 13:50:08.211 11744 11744 F DEBUG   : Revision: '0'
08-06 13:50:08.211 11744 11744 F DEBUG   : ABI: 'arm64'
08-06 13:50:08.211 11744 11744 F DEBUG   : Timestamp: 2025-08-06 13:50:08.113184634+0800
08-06 13:50:08.211 11744 11744 F DEBUG   : Process uptime: 1s
08-06 13:50:08.211 11744 11744 F DEBUG   : Cmdline: com.exemple.test
08-06 13:50:08.211 11744 11744 F DEBUG   : pid: 11719, tid: 11719, name:   >>> com.exemple.test <<<
08-06 13:50:08.211 11744 11744 F DEBUG   : uid: 10293
08-06 13:50:08.211 11744 11744 F DEBUG   : tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
08-06 13:50:08.211 11744 11744 F DEBUG   : pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
08-06 13:50:08.211 11744 11744 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x000000000000000c
08-06 13:50:08.211 11744 11744 F DEBUG   : Cause: null pointer dereference
08-06 13:50:08.211 11744 11744 F DEBUG   :     x0  b40000725d295720  x1  0000007febbbd8b8  x2  0000000000000000  x3  000000000000000c
08-06 13:50:08.211 11744 11744 F DEBUG   :     x4  0000007febbbc1d0  x5  0000007febbbc1d4  x6  1b2d0f3b11d2c7a2  x7  0000007254ee2854
08-06 13:50:08.211 11744 11744 F DEBUG   :     x8  0000000000000000  x9  000000000000000c  x10 0000000000000000  x11 0000000002000000
08-06 13:50:08.211 11744 11744 F DEBUG   :     x12 0000007febbbc3e0  x13 00000072558d6988  x14 0000007254d83ef8  x15 00000000ebad6a89
08-06 13:50:08.211 11744 11744 F DEBUG   :     x16 0000007254ef63d0  x17 0000007febbbd7c0  x18 0000007316738000  x19 b40000725d33fc00
08-06 13:50:08.211 11744 11744 F DEBUG   :     x20 0000000000000000  x21 b40000725d33fcd0  x22 0000000000000002  x23 0000000000000000
08-06 13:50:08.211 11744 11744 F DEBUG   :     x24 0000007febbbd934  x25 000000006f8774a8  x26 0000000000000000  x27 000000006f8774a8
08-06 13:50:08.211 11744 11744 F DEBUG   :     x28 0000007febbbd7d0  x29 0000007febbbd7a0
08-06 13:50:08.211 11744 11744 F DEBUG   :     lr  0000007254d9b304  sp  0000007febbbd7a0  pc  0000007254ef6454  pst 0000000080001000
08-06 13:50:08.211 11744 11744 F DEBUG   : 153 total frames
08-06 13:50:08.211 11744 11744 F DEBUG   : backtrace:

08-06 13:50:08.211 11744 11744 F DEBUG   :       #47 pc 0000000000003edc  /data/app/~~tVaSKAxiJWSXvsD1y19YvA==/com.exemple.test-P6Nt-CeYxb48yv-4c2KiXQ==/lib/arm64/libtest.so (BuildId: e8db9578fbb84b6267d28e3300a51e048bf04d6c)

关键点就在最后一句

#47 pc 0000000000003edc  /data/app/~~tVaSKAxiJWSXvsD1y19YvA==/com.exemple.test-P6Nt-CeYxb48yv-4c2KiXQ==/lib/arm64/libtest.so (BuildId: e8db9578fbb84b6267d28e3300a51e048bf04d6c)

#47 是调用帧

0000000000003edc 是错误发生的相对偏移地址

/data/app/~~tVaSKAxiJWSXvsD1y19YvA==/com.exemple.test-P6Nt-CeYxb48yv-4c2KiXQ==/lib/arm64/libtest.so  是错误发生的动态库

BuildId:e8db9578fbb84b6267d28e3300a51e048bf04d6c 是动态库的唯一标识。

要还原报错方法的地址就要借助 llvm-addr2line 工具。这个工具一般在 /Users/username/Library/Android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-addr2line 下面。 然后只要在命令行执行 

/Users/username/Library/Android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-addr2line -e /Users/username/Project/app/build/intermediates/merged_native_libs/Debug/out/lib/arm64-v8a/libtest.so 0x0000000000003edc 就会输出具体的方法地址。

我得到的是:

/Users/username/app/lib/src/main/cpp/Test.cpp:406

所以就是错误发生的代码是在Test.cpp文件的第406行。

http://www.lryc.cn/news/612381.html

相关文章:

  • 数语科技登陆华为云商店,助力企业释放数据潜能
  • FPGA学习笔记——VGA彩条显示
  • 【软考系统架构设计师备考笔记4】 - 英语语法一篇通
  • 机器人定位装配的精度革命:迁移科技如何重塑工业生产价值
  • Spring Boot 参数校验全指南
  • 应急响应linux
  • vue3+element-plus,el-popover实现筛选弹窗的方法
  • ACL 2025 Oral|Evaluation Agent:面向视觉生成模型的高效可提示的评估框架
  • 【关于Java的对象】
  • C++、STL面试题总结(二)
  • Android14的QS面板的加载解析
  • 【android bluetooth 协议分析 03】【蓝牙扫描详解 4】【BR/EDR扫描到设备后如何上报给app侧】
  • 力扣137:只出现一次的数字Ⅱ
  • 【计算机网络 | 第4篇】分组交换
  • Javascript/ES6+/Typescript重点内容篇——手撕(待总结)
  • Spring之【初识AOP】
  • hf的国内平替hf-mirror
  • IAR软件中测量函数执行时间
  • 开发笔记 | 接口与抽象基类说明以及对象池的实现
  • 机器学习 朴素贝叶斯
  • 【普通地质学】地球的物质组成
  • iOS混淆工具有哪些?在集成第三方 SDK 时的混淆策略与工具建议
  • MEMS陀螺仪如何在复杂井下环境中保持精准测量?
  • 以此芯p1芯片为例研究OpenHarmony上GPU (Vulkan) 加速在深度学习推理中的价值
  • n8n Slack credentials(n8n slack凭证配置步骤)(API access token)
  • Datawhale AI 夏令营:RAG多模态检索(Baseline解读)
  • 解决启动docker报错Cannot connect to the Docker daemon问题
  • Windows 如何上架 iOS 应用?签名上传全流程 + 工具推荐
  • 使用CRC32爆破ZIP压缩包内小文件内容的技术解析
  • app-3