【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。

相关推荐
johnny_hhh1 小时前
在Rocky Linux 9上部署NFS服务并对其进行权限配额管理以及监控
linux·运维·服务器
╰⋛⋋⊱⋋翅膀⋌⊰⋌⋚╯1 小时前
linux-下载抖音作品
linux
e调布鲁斯2 小时前
恢复Ubuntu+Windows10双系统安装前状态及分区还原详细步骤
linux·运维·ubuntu
极客小张2 小时前
基于STM32的智能温室环境监测与控制系统设计(代码示例)
c语言·arm开发·stm32·单片机·嵌入式硬件·物联网·毕业设计
demodashi6663 小时前
ARM64的Mac Node.js前置工作,nvm在线安装
linux·运维·macos
这题怎么做?!?3 小时前
【Linux】网络编程:实现一个简易的基于HTTP协议格式、TCP传输的服务器,处理HTTP请求并返回HTTP响应;GET方法再理解
linux·服务器·c语言·网络·c++·tcp/ip·http
vvw&4 小时前
使用Ubuntu快速部署MinIO对象存储
linux·运维·服务器·ubuntu·minio·cos·oss
归仁9 小时前
wvp 推拉转级联时频繁出现流无法观看的解决办法
linux·服务器·python·音视频
万叶学编程9 小时前
Linux之初体验
linux
小小不董10 小时前
Oracle OCP认证考试考点详解082系列08
linux·运维·服务器·数据库·oracle·dba