使用 windows ndk-stack 分析NDK crash

通过豆包搜索:windows ndk-stack 使用

ndk-stack 路径:使用 Android\Sdk\ndk-bundle\ndk-stack.cmd

adb logcat > crash_log.txt

符号表 /so 文件路径:(obj 目录下的 so 包含完整符号表)app\build\intermediates\cmake\debug\obj\arm64-v8a\libplayer.so

一、首先要验证 obj 目录的 so 是否包含符号表

复制代码
# 1. 切换到NDK的工具目录(以arm64-v8a为例)
cd D:\Android\Sdk\ndk\25.2.9519653\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin

# 2. 执行readelf查看符号表
aarch64-linux-android-readelf.exe -S D:\MyProject\app\src\main\obj\local\arm64-v8a\libffmpeg.so

示例:
C:\Users\jack\AppData\Local\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin>llvm-readelf.exe -S G:\tmp\MyApp11\app\build\intermediates\cmake\debug\obj\arm64-v8a\libplayer.so
There are 35 section headers, starting at offset 0x30544a0:

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  [ 1] .note.android.ident NOTE          0000000000000238 000238 000098 00   A  0   0  4
  [ 2] .note.gnu.build-id NOTE           00000000000002d0 0002d0 000024 00   A  0   0  4
  [ 3] .dynsym           DYNSYM          00000000000002f8 0002f8 0233d0 18   A  7   1  8
  [ 4] .gnu.version      VERSYM          00000000000236c8 0236c8 002efc 02   A  3   0  2
  [ 5] .gnu.version_r    VERNEED         00000000000265c4 0265c4 000070 00   A  7   3  4
  [ 6] .gnu.hash         GNU_HASH        0000000000026638 026638 00b128 00   A  3   0  8
  [ 7] .dynstr           STRTAB          0000000000031760 031760 022350 00   A  0   0  1
  [ 8] .rela.dyn         RELA            0000000000053ab0 053ab0 084630 18   A  3   0  8
  [ 9] .rela.plt         RELA            00000000000d80e0 0d80e0 001398 18  AI  3  21  8
  [10] .gcc_except_table PROGBITS        00000000000d9478 0d9478 000d08 00   A  0   0  4
  [11] .rodata           PROGBITS        00000000000da180 0da180 262f40 00 AMS  0   0 32
  [12] .eh_frame_hdr     PROGBITS        000000000033d0c0 33d0c0 03370c 00   A  0   0  4
  [13] .eh_frame         PROGBITS        00000000003707d0 3707d0 0a9e40 00   A  0   0  8
  [14] .text             PROGBITS        000000000041a620 41a620 567690 00  AX  0   0 32
  [15] .plt              PROGBITS        0000000000981cb0 981cb0 000d30 00  AX  0   0 16
  [16] .data.rel.ro      PROGBITS        00000000009839e0 9829e0 081df0 00  WA  0   0  8
  [17] .fini_array       FINI_ARRAY      0000000000a057d0 a047d0 000010 00  WA  0   0  8
  [18] .init_array       INIT_ARRAY      0000000000a057e0 a047e0 000010 00  WA  0   0  8
  [19] .dynamic          DYNAMIC         0000000000a057f0 a047f0 0001f0 10  WA  7   0  8
  [20] .got              PROGBITS        0000000000a059e0 a049e0 003480 00  WA  0   0  8
  [21] .got.plt          PROGBITS        0000000000a08e60 a07e60 0006a0 00  WA  0   0  8
  [22] .data             PROGBITS        0000000000a0a500 a08500 0010d0 00  WA  0   0  8
  [23] .bss              NOBITS          0000000000a0b5e0 a095d0 1440e40 00  WA  0   0 32
  [24] .comment          PROGBITS        0000000000000000 a095d0 000222 01  MS  0   0  1
  [25] .debug_abbrev     PROGBITS        0000000000000000 a097f2 0ea8cc 00      0   0  1
  [26] .debug_info       PROGBITS        0000000000000000 af40be 13fc36d 00      0   0  1
  [27] .debug_ranges     PROGBITS        0000000000000000 1ef042b 0f9e40 00      0   0  1
  [28] .debug_str        PROGBITS        0000000000000000 1fea26b 0f1d53 01  MS  0   0  1
  [29] .debug_line       PROGBITS        0000000000000000 20dbfbe 3c6589 00      0   0  1
  [30] .debug_loc        PROGBITS        0000000000000000 24a2547 99ab7a 00      0   0  1
  [31] .debug_aranges    PROGBITS        0000000000000000 2e3d0c1 000690 00      0   0  1
  [32] .symtab           SYMTAB          0000000000000000 2e3d758 13e6a8 18     34 48330  8
  [33] .shstrtab         STRTAB          0000000000000000 2f7be00 000172 00      0   0  1
  [34] .strtab           STRTAB          0000000000000000 2f7bf72 0d852d 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  p (processor specific)
  • 如果输出中包含 [32] .symtab(符号表段)、[34] .strtab(字符串表段),说明符号表完整;
  • 如果这些段不存在,说明 so 已被剥离符号表。

二、开始解析(ndk-stack 输出):

复制代码
# 核心命令格式
D:\Android\Sdk\ndk\25.2.9519653\ndk-stack.cmd -sym 你的so符号表目录 -dump crash_log.txt

具体示例如下:

C:\Users\jack\AppData\Local\Android\Sdk\ndk-bundle>ndk-stack.cmd -sym G:\tmp\MyApp11\app\build\intermediates\cmake\debug\obj\arm64-v8a\libplayer.so -dump G:\tmp\tmp_log\crash_log.txt
********** Crash dump: **********
Build fingerprint: 'HUAWEI/SEA-AL10/HWSEA-A:10/HUAWEISEA-AL10/104.0.0.121C00:user/release-keys'
#00 0x000000000006baf0 /apex/com.android.runtime/lib64/bionic/libc.so (__memcpy+96) (BuildId: b91c775ccc9b0556e91bc575a2511cd0)
#01 0x0000000000422dfc /data/app/com.Ling.player-pQuyWpT6I3Dz4I02Bvk3Mg==/base.apk!libplayer.so (offset 0x4b1000) (LingPlayer::start_()+344) (BuildId: ca487aac8417e18afaeb72f37a9309550d976984)
#02 0x0000000000422c90 /data/app/com.Ling.player-pQuyWpT6I3Dz4I02Bvk3Mg==/base.apk!libplayer.so (offset 0x4b1000) (task_start(void*)+28) (BuildId: ca487aac8417e18afaeb72f37a9309550d976984)
#03 0x00000000000cf7c0 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: b91c775ccc9b0556e91bc575a2511cd0)
#04 0x00000000000721a8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: b91c775ccc9b0556e91bc575a2511cd0)
Crash dump is completed
相关推荐
小邓睡不饱耶3 小时前
使用Scala实现手机号码归属地查询系统
开发语言·windows·scala
0白露3 小时前
关闭搜狗输入法右下角广告,可以适用于大多数应用系统通知的广告
windows·bug
欧阳x天4 小时前
STL讲解(七)——list容器的模拟实现
c++·windows·list
嵩山小老虎13 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
AndyHeee17 小时前
【windows使用TensorFlow,GPU无法识别问题汇总,含TensorFlow完整安装过程】
人工智能·windows·tensorflow
远程修电脑→241697677517 小时前
三角洲行动弹窗提示CPU虚拟化未开启或被占用启动腾讯游戏时出现【ACE安全中心】虚拟化相关报错
windows
188_djh17 小时前
# 15_电脑版百度网盘每次登录都显示安全验证,很麻烦,一招解决
windows·app·百度网盘·百度网盘安全验证·baidudisk
郭涤生17 小时前
C++的函数是否可以做到完全覆盖Linux和windows的跨平台
linux·c++·windows
Code小翊17 小时前
Python 核心语法速查手册
windows