当前位置: 首页 > 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.dtcms.com/a/318078.html

相关文章:

  • Mybatis的高级特性
  • 【自动化运维神器Ansible】playbook核心组件之tags深度解析
  • 第一性原理科学计算服务器如何选择配置-CPU选择篇
  • thinkpad E14重装win 10系统
  • 云端软件工程智能代理:任务委托与自动化实践全解
  • Spring Boot Actuator 监控功能的简介及禁用
  • Java面试题036:一文深入了解VUE(1)
  • 批量提问程序开发方案:基于Python的百度文小言接口实现
  • 学习嵌入式之硬件——ARM体系
  • vue margin与padding对比
  • 用户体验设计中微投入设计:用户不知不觉付出的 3 种方式
  • 【24】C++实战篇——【 C++ 外部变量】 C++多个文件共用一个枚举变量,外部变量 extern,枚举外部变量 enum
  • Kaggle 经典竞赛泰坦尼克号:超级无敌爆炸详细基础逐行讲解Pytorch实现代码,看完保证你也会!!!
  • 直播间自动发言工具的开发
  • OpenAI/gpt-oss开源模型部署与使用全指南
  • 三维偏序 -- cdq 套 cdq
  • 蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
  • 【YOLOv8改进 - C2f融合】C2f融合EBlock(Encoder Block):低光增强编码器块,利用傅里叶信息增强图像的低光条件
  • 分类数据集 - 水稻叶病虫害分类数据集下载
  • Java面试宝典:Java内存模型与对象可达性判定原理
  • Python爬虫实战:研究spiderfoot工具,构建网络情报收集系统
  • java 之 继承
  • jdk动态代理如何实现
  • 【补题】Codeforces Round 779 (Div. 2) C. Shinju and the Lost Permutation
  • 【补题】CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) D. K-good
  • 大数据之HBase
  • 深度学习-卷积神经网络CNN-多输入输出通道
  • MySQL数据库索引及底层数据结构
  • 宝塔部署go 项目
  • Maven--打包方式详解 (pom、war、jar)