【ARM Linux 系统稳定性分析入门及渐进 1.1 -- Crash 工具功能概述】

文章目录

    • [Crasg 功能概述](#Crasg 功能概述)
      • [Crash 核心功能](#Crash 核心功能)
      • [Crash 版本独立性](#Crash 版本独立性)
    • [为什么使用 Crash 工具?](#为什么使用 Crash 工具?)
      • [Crash 工具的优势](#Crash 工具的优势)
    • [Crash 工具编译](#Crash 工具编译)
      • [debug 信息保留](#debug 信息保留)

Crasg 功能概述

crash 工具是一个强大的 Linux 内核调试和分析工具,最初基于 SVR4 UNIX 的 crash 命令,但经过显著增强,完全与 GNU GDB 调试器结合在一起。这样的结合有效地将传统 UNIX crash 工具的内核特定特性与 GDB 的源代码级调试能力结合在一起。

crash 工具可以用于调查以下几种情况:

  • 实时 Linux 系统:可以在系统运行时进行实时分析。
  • Linux 内核核心转储
  • 通过 kdump 功能创建的转储。
  • 通过 makedumpfile 命令创建的压缩内核核心转储。
  • 通过 Red Hat Netdump 和 Diskdump 功能创建的核心转储。
  • Xen 主机和客机的内核核心转储。
  • KVM 客机的内核核心转储通过 virsh dump 创建。
  • S390 和 S390x 架构的内核核心转储通过 IBM Standalone Core Dump 功能创建。
  • 通过 LKCD SourceForge 项目创建的核心转储。
  • 通过 Mission Critical Linux 提供的 MCORE 补丁创建的核心转储。

Crash 核心功能

crash 工具提供了一系列命令,用于进行常见的内核核心分析,例如:

  • 内核堆栈回溯:获取所有进程的内核堆栈回溯。
  • 源代码反汇编:可以查看内核的源代码级别的反汇编。
  • 格式化显示内核结构和变量:可以查看内核结构体和变量的详细信息。
  • 虚拟内存数据:分析和展示内核的虚拟内存使用情况。
  • 链表转储:可以查看和转储内核中的链表结构。

此外,crash 工具还包括了许多深入探索特定内核子系统的命令,同时允许输入相关的 GDB 命令,这些命令会传递给 GDB 模块执行。

Crash 版本独立性

crash 工具设计为独立于 Linux 版本。当新的内核源代码影响到 crash 的正确功能和命令集时,该工具将会更新以识别新的内核代码变化,同时保持对早期版本的向后兼容性。这种设计使得 crash 成为一个非常灵活和强大的内核调试工具,能够适应多种 Linux 内核版本和配置。

典型应用:

在实际应用中,系统管理员和开发者可以使用 crash 工具进行以下操作:

  1. 诊断系统崩溃:通过分析核心转储,找出导致系统崩溃的原因。
  2. 调试内核模块:在开发和测试阶段,通过实时或转储分析方法调试内核模块。
  3. 性能分析:通过分析内核的行为,优化系统性能。

为什么使用 Crash 工具?

Linux 操作系统最初缺乏内置的、传统 UNIX 风格的内核崩溃转储功能。这一缺陷最早在 1999 年通过 Mission Critical Linux 的 MCORE 内核补丁和 SGI 的 LKCD(Linux Kernel Crash Dump)内核补丁得到了初步解决,随后在 2002 年通过 Red Hat 的 Netdump 功能和在 2004 年通过 Red Hat 的 Diskdump 功能进行了改进。最终,上游 Linux 社区在 2006 年决定采用 Kdump 作为标准的崩溃转储机制。

然而 ,生成内核崩溃转储文件只是解决问题的一半;还需要一个工具来识别转储文件格式,读取并提供一组有用的命令来解读它。此外,从用户空间检查实时系统的内核内部状况,唯一可用的选择是使用 GDB 处理 /proc/kcore。虽然 GDB 是一个非常强大的工具,但它主要用于调试用户程序,对内核的了解并不全面。因此,仅使用 GDB 在查看内核内存时作用有限,基本上只能打印内核数据结构(前提是 vmlinux 文件是用 -g C 标志构建的)、反汇编内核文本以及进行原始数据转储。此外,像 Red Hat Enterprise Linux 这样的发行版限制了对 /proc/kcore 的访问,使其无法用作内核内存源。

对于内核崩溃转储文件而言,Red Hat 的 Netdump 和未压缩的 Diskdump 功能,以及 Kdump 创建的转储文件是可被 GDB 读取的,但除了显示引起崩溃的任务的堆栈跟踪外,其功能与读取 /proc/kcore 时一样受限。此外,GDB 无法读取 LKCD、MCORE、Xen 或 s390/s390x 的转储文件。

在这种情况下,Crash 工具被开发出来,以方便地覆盖所有基于崩溃转储的分析需求,也包括所有列出的转储文件格式及实时系统。此外,它也被设计为易于扩展,以适应内核开发人员或分析人员的特定需求;内置命令集可以轻松扩展或增强,外部命令模块也可以编写并动态附加。

Crash 工具的优势

  • 支持多种转储格式:Crash 能够处理多种内核崩溃转储格式,包括 Kdump、Netdump、Diskdump 等,以及特定硬件架构的转储文件,如 Xen 和 s390/s390x。
  • 实时系统分析:不仅限于转储文件分析,Crash 还可以用于分析实时系统的内核状态。
  • 扩展性:用户可以根据需求开发新的命令模块来扩展 Crash 的功能,以满足特定的调试和分析需求。
  • 内核感知:与 GDB 不同,Crash 是专为内核分析设计的,它理解内核数据结构和内存布局,能够提供更丰富的内核调试信息。

Crash 工具编译

---> crash 工具官网链接 <---


powershell 复制代码
cd crash/crash-8.0.5$
make target=ARM64 -j32 //首次编译需要下载gdb源码

编译好后会生成文件如下:

debug 信息保留

vmlinux文件需要完整的debug_info,所以kernel编译前,需要再.config里添加CONFIG_DEBUG_INFO_REDUCED=n选项才可以,重新编译后,保存对应的vmlinux。

相关推荐
QT.qtqtqtqtqt1 小时前
攻防世界easyphp
linux·运维·服务器
菜鸟康1 小时前
Linux系统编程——系统内核中的信号
linux·运维·服务器
CSND7403 小时前
Ubuntu vi(vim)编辑器配置一键补全main函数
linux·c语言·ubuntu·编辑器·vim
シ風箏6 小时前
Neo4j【环境部署 02】图形数据库Neo4j在Linux系统ARM架构下的安装使用
linux·数据库·arm·neo4j
Cachel wood8 小时前
Vue.js前端框架教程8:Vue消息提示ElMessage和ElMessageBox
linux·前端·javascript·vue.js·前端框架·ecmascript
小屁不止是运维11 小时前
麒麟操作系统服务架构保姆级教程(二)ssh远程连接
linux·运维·服务器·学习·架构·ssh
超爱吃士力架11 小时前
Ubuntu操作系统安装docker
linux·前端·后端
黑客K-ing12 小时前
网络安全防范
linux·服务器·web安全
王三三13 小时前
群晖利用acme.sh自动申请证书并且自动重载证书的问题解决
linux·自动化·证书·群晖·acme·acme.sh·lets encrypt
路飞雪吖~13 小时前
【Linux】进程控制
linux·运维·服务器