SylixOS Crash 助手使用说明

本文介绍如何使用SylixOS Crash助手分析嵌入式系统的崩溃原因,包括选择正确的架构文件、确定可执行文件基地址及分析具体地址的方法。

SylixOS Crash 助手使用说明

一、原理

​ Crash 助手借助 xxx-elf-addr2line.exe 来分析一个地址对应的可执行文件的源码位置,以及函数名称。因此 Crash 助手分析的准确性由 xxx-elf-addr2line.exe 保证。

​ SylixOS 的 IDE 目录下包含所有 SylixOS 支持架构的 xxx-elf-addr2line.exe 文件,其目录如下:

在这里插入图片描述

二、使用方法

1、架构编译文件选择:

​ 首先需要先根据当前的架构选择对应的 xxx-elf-addr2line.exe 文件,具体的文件位置见第一章原理中的目录图

2、可执行文件选择:

​ 第二步需要分析对应的可执行文件。

​ 如需要分析一个 ko 文件,然后就选择 IDE 中编译好的 ko 文件。如图所示:

在这里插入图片描述

这里需要注意:

不要选取 strip 下的文件,直接选择 release 目录或者 debug 目录下编译出的文件

3、找到当前分析的文件运行时的基地址:

  • 如果是 ko 可执行文件,那么可以通过 “lsmod” 的方式去查看当前的可执行文件运行时的基地址,如图所示:

在这里插入图片描述

  • 如果是 App 等文件,可以借助 SylixOS 下的 VPROC_MODULE_SHOW 环境变量去获取基地址,默认值为0,如图

在这里插入图片描述

此时,可以直接使用 shell 命令对环境变量进行赋值,如

VPROC_MODULE_SHOW=1

在这里插入图片描述

​ 可以看到,开启了此环境变量后,每次运行应用程序都会打印出所有的 base 地址。

​ 将上述获取到的基地址填入到 Crash 助手中即可。

4、分析地址

最后就是使用时,将跑飞的 PC 地址填入到 Crash 助手,然后点击”开始分析“按钮,就可以进行当前地址所对应的源码位置及函数名称的分析,如下图所示:

在这里插入图片描述

注意:第三步和第四步填入的地址需要是 16 进制,当然一般也都是 16 进制的。

另外,填入的 16 进制地址加不加 0x 均可,怎么方便怎么来

5、支持

如果此软件有使用 bug,欢迎邮件联系:wupengcheng@acoinfo.com
在这里插入图片描述

`crash` 是一个用于分析 Linux 内核崩溃转储(`vmcore`)或运行中内核的调试工具,功能非常强大。它可以查看内存、进程、堆栈、模块、设备等信息,甚至可以将虚拟地址转换为物理地址。 --- ### ✅ `crash` 的基本使用方法 #### 1. **安装 `crash` 工具** 在基于 `yum` 的系统(如 CentOS、RHEL)上: ```bash sudo yum install -y crash ``` 在基于 `apt` 的系统(如 Ubuntu)上: ```bash sudo apt install -y crash ``` > ⚠️ 注意:在 Ubuntu 上使用 `crash` 需要安装额外的内核调试符号包(如 `linux-image-debug`)。 --- #### 2. **准备调试信息** 使用 `crash` 时需要两个关键文件: - **vmlinux**:包含调试信息的内核映像文件(非压缩的原始内核) - **kcore** 或 **vmcore**:内核内存映像文件(`/proc/kcore` 或从崩溃转储中获取) ##### 获取 vmlinux 的方式: - CentOS/RHEL: ```bash sudo yum install -y kernel-debuginfo-$(uname -r) ``` vmlinux 文件通常位于 `/usr/lib/debug/lib/modules/$(uname -r)/vmlinux` - Ubuntu: ```bash sudo apt install -y linux-image-debug-$(uname -r) ``` --- #### 3. **启动 crash 工具** ##### 查看运行中的内核: ```bash sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /proc/kcore ``` ##### 查看内核崩溃转储(vmcore): ```bash sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /path/to/vmcore ``` --- ### 🔍 常用命令示例 进入 `crash>` 提示符后,可以使用以下常用命令: | 命令 | 说明 | |------|------| | `help` | 显示所有命令帮助 | | `ps` | 查看进程列表 | | `task <pid>` | 查看指定进程的 task_struct | | `bt` | 查看当前进程的堆栈 | | `bt <pid>` | 查看指定进程的堆栈 | | `vm` | 查看进程的虚拟内存区域 | | `virt <vaddr>` | 查看虚拟地址对应的物理地址 | | `phys <paddr>` | 查看物理地址对应的虚拟地址(需启用 CONFIG_KPHYSMAP) | | `log` | 查看内核日志(dmesg 输出) | | `mount` | 查看挂载的文件系统 | | `files` | 查看系统中打开的文件 | | `exit` 或 `q` | 退出 crash | --- ### 🧪 示例:查看虚拟地址对应的物理地址 ```bash crash> virt 0x7f8c1a2b3000 ``` 输出可能如下: ``` VIRTUAL PHYSICAL 0x7f8c1a2b3000 0x1a2b3000 ``` --- ### 🛠️ 其他调试技巧 - **查看某个模块的地址范围**: ```bash crash> mod ``` - **查看某个进程的内存映射**: ```bash crash> vm <pid> ``` - **查看内核崩溃原因**: ```bash crash> bt ``` --- ### 📦 总结 | 功能 | 命令 | |------|------| | 启动 crash | `crash vmlinux kcore` | | 查看进程列表 | `ps` | | 查看进程堆栈 | `bt <pid>` | | 查看虚拟地址对应物理地址 | `virt <vaddr>` | | 查看物理地址对应虚拟地址 | `phys <paddr>` | | 查看崩溃日志 | `log` | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值