Native 崩溃解析工具

NDK Tools Library

一个Python工具库,用于简化Android NDK崩溃分析。该库通过封装NDK工具来简化操作,支持解析.dmp文件和logcat崩溃日志,并支持灵活配置参数。支持多平台(Linux、Windows、macOS),并提供Shell和Batch脚本便于使用。

功能特性

  • 解析.dmp文件:使用ndk-stack工具解析崩溃堆栈

  • 解析原生崩溃日志:从logcat输出中提取原生崩溃信息

  • 支持灵活配置:配置符号表目录、日志文件路径、NDK路径等

  • 跨平台支持:支持Linux、Windows和macOS

  • 简化指令:提供Shell和Batch脚本,简化用户操作

  • Build ID 验证:可选的 Build ID 验证功能,默认关闭

项目结构


ndk_tools/

├── ndk_tools/

│ ├── __init__.py # 初始化模块

│ ├── ndk_stack_parser.py # NDK堆栈解析模块

│ ├── logcat_parser.py # logcat崩溃日志解析模块

│ ├── config.py # 配置文件

│ └── utils.py # 工具类

├── scripts/

│ ├── ndk_parse_dmp.sh # 解析.dmp文件的Shell脚本

│ ├── ndk_parse_logcat.sh # 解析logcat崩溃日志的Shell脚本

│ ├── ndk_parse_dmp.bat # 解析.dmp文件的Batch脚本

│ └── ndk_parse_logcat.bat # 解析logcat崩溃日志的Batch脚本

│ ├── and_setup_env.sh # 环境设置脚本 (Linux/macOS)

│ ├── setup_env.bat # 环境设置脚本 (Windows)

│ ├── quick_analyze.sh # 快速分析脚本 (Linux/macOS)

│ └── quick_analyze.bat # 快速分析脚本 (Windows)

安装要求

  • Python 3.7+

  • Android NDK (需要设置ANDROID_NDK_HOME环境变量)

环境变量配置

工具库使用以下环境变量:

  • ANDROID_NDK_HOME: Android NDK的安装路径(必需,用于符号化)

  • SYMBOLS_DIR: 符号表目录的路径(可选,也可通过命令行选项指定)

  • OUTPUT_DIR: 输出文件的目录路径(可选)

环境设置方式

提供了两种设置环境变量的方式:

1. 使用环境设置脚本(推荐)

在 Linux/macOS 上:


# 设置环境变量

source and_setup_env.sh -n /path/to/ndk [-s /path/to/symbols] [-o /path/to/output]

  


# 示例

source and_setup_env.sh -n ~/Android/Sdk/ndk/25.1.8937393 -s ~/symbols -o ~/output

  


# 显示帮助信息

source and_setup_env.sh --help

在 Windows 上:


:: 设置环境变量

scripts\setup_env.bat -n C:\path\to\ndk [-s C:\path\to\symbols] [-o C:\path\to\output]

  


:: 示例

scripts\setup_env.bat -n C:\Android\Sdk\ndk\25.1.8937393 -s C:\symbols -o C:\output

  


:: 显示帮助信息

scripts\setup_env.bat --help

2. 手动设置环境变量


# Linux/macOS

export ANDROID_NDK_HOME=/path/to/ndk

export SYMBOLS_DIR=/path/to/symbols

export OUTPUT_DIR=/path/to/output

  


# Windows

set ANDROID_NDK_HOME=C:\path\to\ndk

set SYMBOLS_DIR=C:\path\to\symbols

set OUTPUT_DIR=C:\path\to\output

使用方法

1. 使用Python API


from ndk_tools import NDKStackParser, LogcatParser, Config

  


# 创建配置

config = Config(

ndk_path="/path/to/ndk",

symbols_dir="/path/to/symbols",

output_dir="/path/to/output"

)

  


# 解析DMP文件

parser = NDKStackParser(config)

stack_trace = parser.parse_dump_file("crash.dmp")

print(stack_trace)

  


# 解析Logcat日志

logcat_parser = LogcatParser(

symbols_dir="/path/to/symbols",

ndk_path="/path/to/ndk",

output_dir="/path/to/output",

verify_build_id=False # 默认关闭 Build ID 验证

)

crash_info = logcat_parser.parse_logcat_file("logcat.txt")

if crash_info:

print(f"Process: {crash_info.process}")

print(f"Signal: {crash_info.signal}")

print(f"Signal Detail: {crash_info.signal_detail}")

print("Stack trace:")

for line in crash_info.stack_trace:

print(line)

2. 使用命令行脚本

快速分析脚本(推荐)

快速分析脚本会自动识别文件类型并调用相应的解析脚本。

在 Linux/macOS 上:


# 基本用法

./scripts/quick_analyze.sh crash.log

  


# 使用符号表

./scripts/quick_analyze.sh -s ~/symbols crash.log

  


# 指定 NDK 路径

./scripts/quick_analyze.sh -n ~/Android/Sdk/ndk/25.1.8937393 -s ~/symbols crash.log

  


# 指定输出目录

./scripts/quick_analyze.sh -o ~/output crash.log

  


# 显示帮助信息

./scripts/quick_analyze.sh --help

在 Windows 上:


:: 基本用法

scripts\quick_analyze.bat crash.log

  


:: 使用符号表

scripts\quick_analyze.bat -s C:\symbols crash.log

  


:: 指定 NDK 路径

scripts\quick_analyze.bat -n C:\Android\Sdk\ndk\25.1.8937393 -s C:\symbols crash.log

  


:: 指定输出目录

scripts\quick_analyze.bat -o C:\output crash.log

  


:: 显示帮助信息

scripts\quick_analyze.bat --help

单独使用解析脚本

解析Logcat日志

在Linux/macOS上:


# 基本用法

./scripts/ndk_parse_logcat.sh app_crash.log

  


# 使用符号表

./scripts/ndk_parse_logcat.sh -s /path/to/symbols app_crash.log

# 或

./scripts/ndk_parse_logcat.sh --symbols /path/to/symbols app_crash.log

  


# 使用环境变量设置符号表

export SYMBOLS_DIR=/path/to/symbols

./scripts/ndk_parse_logcat.sh app_crash.log

  


# 显示帮助信息

./scripts/ndk_parse_logcat.sh --help

在Windows上:


:: 基本用法

scripts\ndk_parse_logcat.bat app_crash.log

  


:: 使用符号表

scripts\ndk_parse_logcat.bat -s C:\path\to\symbols app_crash.log

:: 或

scripts\ndk_parse_logcat.bat --symbols C:\path\to\symbols app_crash.log

  


:: 使用环境变量设置符号表

set SYMBOLS_DIR=C:\path\to\symbols

scripts\ndk_parse_logcat.bat app_crash.log

  


:: 显示帮助信息

scripts\ndk_parse_logcat.bat --help

命令行选项

quick_analyze 脚本选项


选项:

-h, --help 显示帮助信息并退出

-s, --symbols <dir> 指定符号表目录的路径

-n, --ndk <path> 指定Android NDK路径

-o, --output <dir> 指定输出目录的路径

--no-verify-build-id 禁用 Build ID 验证

ndk_parse_logcat 脚本选项


选项:

-h, --help 显示帮助信息并退出

-s, --symbols <dir> 指定符号表目录的路径

如果未提供,将使用SYMBOLS_DIR环境变量

-o, --output <dir> 指定输出目录的路径

--verify-build-id 启用 Build ID 验证

错误处理

工具库会在以下情况抛出异常:

  • 环境变量未设置

  • NDK路径不存在

  • 符号表目录不存在

  • DMP文件不存在或无法解析

  • ndk-stack工具执行失败

退出代码:

  • 0: 成功

  • 1: 参数无效

  • 2: 文件未找到

  • 3: 符号表目录未找到

Native-Toolkit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JT-Blink

因热爱创作,打赏促优质创作。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值