crash分析ramdump

我们需要在PC机上运行crash,从源码来编译,

可以从Redhat社区下载源码。

解压后,进入目录后使用一下命令:

make target=arm64
make install

这样就安装好了crash了。

 crash介绍

crash主要是用来离线分析linux内核内存转存文件,它整合了gdb工具,具有很强的功能,可以查看堆栈,dmesg日志,内核数据结构,反汇编等等.其支持多种工具生成的内存转储文件格式,包括:

  • Live linux系统

  • kdump产生的正常的和压缩的内存转储文件

  • 由makedumpfile命令生成的压缩的内存转储文件

  • 由netdump生成的内存转储文件

  • 由diskdump生成的内存转储文件.

  • 由kdump生成的Xen的内存转储文件

  • LKCD生成的内存转储文件

  • Mcore生成的内存转储文件

  • ramdump格式的raw内存转储文件

crash使用方法

本文主要使用crash来分析ramdump文件.ramdump文件几乎是对整个内存的镜像,除了一些security类型的memory抓不出来之外,几乎所有的DRAM都被抓下来.有些问题的复现概率低,而且有些问题是由于踩内存导致的,这种问题靠log往往是无法分析出来的,所以如果可以在问题发生时候把内存镜像保存下来,就可以分析了.

在命令行下使用如下命令,在”@”后面跟的是DRAM的物理内存开始的物理地址:

#crash <vmlinux> <ram_dump_img@dram_addr_phy_start>

这里的vmlinux是和ram dump上的内核要一致,而且是需要打开内核的debug选项.

Crash成功启动后,会出现如下的信息:这里就可以看到关于一些系统的信息等等;接下来我们可以在”crash>”输入命令来分析了。

crash中的命令使用

ps

该命令可以输出进程信息

这里的进程状态标志:

  • RU:即R状态,进程处于TASK_RUNNING.

  • IN:S状态,进程处于TASK_INTERRUPTIBLE.

  • UN:D状态,进程处于TASK_UNINTERRUPTIBLE.

bt <pid>

用于查看某个线程或进程的调用栈

bt -a:以任务为单位,显示每个任务的堆栈信息.

bt -t:显示当前任务的堆栈中的所有文本标志付

bt -f:显示当前任务的所有堆栈数据,通常用来检查每个函数的参数传递.

#@# dis <函数名>

用于反汇编某个函数.

dis后面还可以跟着的参数有:

-l | -u | -b num | address| symbol| expression| count

whatis -o <结构体>

用于查看结构体.这后面还可以跟联合体,宏的名称或者内核的符号.

rd <虚拟地址>

用于查看虚拟地址的值.其后面可以跟的参数还有:

-dDsSupxmf | -8 | -16| -32| -64| -o offset| -e addr| address| symbol |count

struct <结构体> <该结构体的虚拟地址>

用于查看该虚拟地址处,该结构体的值,使用这个可以查看某个进程在所拥有的某个结构体的值

struct <结构体>.成员,成员<结构体的虚拟地址>

用于查看该结构体的内部成员的值.

sym

用于把一个标志符转换到它所对应的虚拟地址,或者把虚拟地址转换为它所对应的标志符。

sym -l:列出所有的标志符以及虚拟地址.

sym -M:列出模块标志符的集合.

sym -m module <name>:列出模块name的虚拟地址

sym vaddr:显示虚拟地址vaddr所代表的标志.

sym -q <string>:搜索所有包含string的标志以及虚拟地址.

task [ -R member][,member] [pid]

用于显示指定进程的task_struct的内容.

timer

用于显示timer相关信息.

kmem -i

用于查看内存使用信息.

l *虚拟地址

用于查看指定地址对应的代码行.

附:crash中常用的命令

命令说明例子
*指针的快捷方式,用于代替struct/union*page 0xc02943c0:显示0xc02943c0地址的page结构体
files显示已打开的所有文件的信息files 462:显示进程462的已打开文件信息
mach显示与机器相关的参数信息mach:显示CPU型号,核数,内存大小等
sys显示特殊系统的数据 sys config:显示CONFIG_xxx配置宏状态
timer无参数。按时间的先后顺序显示定时器队列的数据timer:显示详细信息
mod显示已加载module的详细信息mod:列出所有已加载module信息
runq显示runqueue信息runq:显示所有runqueue里的task
tree显示基数树/红黑树结构tree -t rbtree -o vmap_area.rb_node vmap_area_root:显示所有红黑树vmap_area.rb_node节点地址
fuser显示哪些task使用了指定的文件/socketfuser /usr/lib/libkfm.so.2.0.0:显示使用了该文件的所有进程
mount显示已挂载的文件系统信息mount:当前已挂载的文件系统信息
ipcs显示System V IPC信息ipcs:显示系统中System V IPC信息
ps显示进程状态注意:类似ps命令
struct显示结构体的具体内容struct vm_area_struct c1e44f10:显示c1e44f10结构
union显示联合体的具体内容,用法与struct一致union bdflush_param:显示bdflush_param结构
waitq列出在等待队列中的所有task。参数可以指定队列的名称、内存地址等waitq buffer_wait:显示buffer_wait等待队列信息
irq显示中断编号的所有信息irq 18:显示中断18的信息
list显示链表的内容list task_struct.p_pptr c169a000:显示c169a000地址所指task里p_pptr链表
log显示内核的日志,以时间的先后顺序排列log -m:显示kernel log
dev显示数据关联着的块设备分配,包括端口使用、内存使用及PCI设备数据dev:显示字符/块设备相关信息
sig显示一个或者多个task的signal-handling数据sig 8970:显示进程8970的信号处理相关信息
task显示指定内容或者进程的task_struct的内容task -x:显示当前进程task_struct等内容
swap无参数。显示已配置好的交换设备信息swap:交换设备信息
search在给定范围的用户、内核虚拟内存或者物理内存搜索值search -u deadbeef:在用户内存搜索0xdeadbeef
bt显示调用栈信息bt:显示当前调用栈
net显示各种网络相关的数据net:显示网络设备列表
vm显示task的基本虚拟内存信息vm:类似于/proc/self/maps
btop把一个16进制地址转换成它的分页号N/A
ptob该命令与btop相反,是把一个分页号转换成地址N/A
vtop显示用户或内核虚拟内存所对应的物理内存N/A
ptov该命令与vtop相反。把物理内存转换成虚拟内存N/A
pte16进制页表项转换为物理页地址和页的位设置N/A
alias显示或建立一个命令的别名alias kp kmem -p:以后用kp命令相当于kmem -p
foreach用指定的命令枚举foreach bt:显示所有进程的调用栈
repeat循环执行指定命令repeat -1 p jiffies:每个1s执行p jiffies
ascii把16进制表示的字符串转化成ascii表示的字符串ascii 62696c2f7273752f:结果为/usr/lib
set设置要显示的内容,内容一般以进程为单位,也可以设置当前crash的内部变量set -p:切换到崩溃进程的上下文环境
pprint的缩写,打印表达式的值。表达式可以为变量,也可以为结构体N/A
disdisassemble的缩写。把一个命令或者函数分解成汇编代码dis sys_signal:反汇编sys_signal函数
whatis搜索数据或者类型的信息whatis linux_binfmt:显示linux_binfmt结构体
eval计算表达式的值,及把计算结果或者值显示为16、10、8和2进制N/A
kmem显示当前kernel使用内存状况kmem -i:显示kernel使用内存状况
sym显示符号所在的虚拟地址,或虚拟地址对应的符号sym jiffies:显示jiffies地址
rd显示指定内存的内容。缺少的输出格式是十六进制输出rd -a linux_banner:显示linux_banner内容
wr根据参数指定的写内存。在定位系统出错的地方时,一般不使用该命令 wrmy_debug_flag 1:修改my_debug_flag值为1
gdb执行GDB原生命令gdb help:执行gdb的help命令
extend动态装载或卸载crash额外的动态链接库N/A
q退出N/A
exit同q,退出N/A
help帮助命令N/A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/303466.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机基础面试题 |17.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

e2studio开发三轴加速度计LIS2DW12(1)----轮询获取加速度数据

e2studio开发三轴加速度计LIS2DW12.1--轮询获取加速度数据 概述视频教学样品申请源码下载通信模式管脚定义IIC通信模式速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原…

大数据Doris(五十二):SQL函数之数学函数

文章目录 SQL函数之数学函数 一、abs(double a)

基于多反应堆的高并发服务器【C/C++/Reactor】(中)HttpRequest模块 解析http请求协议

一、HTTP响应报文格式 HTTP/1.1 200 OK Bdpagetype: 1 Bdqid: 0xf3c9743300024ee4 Cache-Control: private Connection: keep-alive Content-Encoding: gzip Content-Type: text/html;charsetutf-8 Date: Fri, 26 Feb 2021 08:44:35 GMT Expires: Fri, 26 Feb 2021 08:44:35 GM…

系列三十五、获取Excel中的总记录数

一、获取Excel中的总记录数 1.1、概述 使用EasyExcel开发进行文件上传时&#xff0c;通常会碰到一个问题&#xff0c;那就是Excel中的记录数太多&#xff0c;使用传统的方案进行文件上传&#xff0c;很容易就超时了&#xff0c;这时可以通过对用户上传的Excel中的数量进行限制…

闰年问题-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第25讲。 闰年问题&#xf…

swaggerUI不好用,试试这个openapiUI?

1.背景 由于长期使用 swaggerUI 工具&#xff0c;它的轻量风格个人觉得还是不错的&#xff0c;但是它的整体使用体验确实不好&#xff0c;用过的可能都有体会&#xff0c;这里就不一一列举了&#xff08;由于语言表达能力有限&#xff0c;手动&#x1f436;保命&#xff0c;毕…

1.7数算PPT选择汇总,PTA选择汇总,计算后缀表达式,中缀转后缀、前缀、快速排序

PTA选择汇总 在第一个位置后插入&#xff0c;注意是在后面插入&#xff0c;而不是前面&#xff1b;要移动49&#xff0c;为50-I&#xff0c;第25个的话&#xff0c;移25个 如果是插在前面&#xff0c;就移动50&#xff0c;N-I1&#xff0c;注意是插在前面还是后面 删第一个&a…

JS-基础语法(一)

JavaScript简单介绍 变量 常量 数据类型 类型转换 案例 1.JavaScript简单介绍 JavaScript 是什么&#xff1f; 是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;可以实现人机交互效果。 JS的作用 JavaScript的组成 JSECMAScript( 基础语法 )…

变换器电感饱和以及电流变大电感变小原因分析

电感电流变大电感值变小 在一个DC-DC电源转换器中&#xff0c;电感器的电流与其电感量是有关系的。当电感器的电流增大时&#xff0c;其电感量通常会变小。 电感器的电感量&#xff08;L&#xff09;是指在单位电流变化率下&#xff0c;电感器两端的电压变化的比例。根据电感…

【JAVA GUI+MYSQL]社团信息管理系统

本社团信息管理系统主要实现登录注册、管理员信息管理、社团用户信息管理、用户申请信息管理功能模块。 目录 &#xff11;&#xff0e;系统主要功能介绍 &#xff12;&#xff0e; 数据库概念模型设计 3.具体功能模块的实现 3.1模型类 3.1.1Student.java 3.1.2User .j…

高通平台开发系列讲解(USB篇)Ubuntu 下如何使用模块

文章目录 一、查看VID、PID二、adb添加2.1、在udev下添加模块的VID2.2、重启adb服务三、虚拟串口添加(AT、Diag)沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要图解高通平台上位机使用方法 一、查看VID、PID 在ubuntu下使用模块进行AT指令发送,Diag等串…

【QML COOK】- 003-处理鼠标事件

1. 编辑main.qml import QtQuickWindow {width: 800height: 800visible: truetitle: qsTr("Hello World")Image {id: backgroudanchors.fill: parentsource: "qrc:/Resources/Images/arrow.png"}MouseArea {anchors.fill: parentonClicked: backgroud.rot…

docker run 命令详解

一、前言 Docker容器是一个开源的应用容器引擎&#xff0c;让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何安装了Docker引擎的服务器上&#xff08;包括流行的Linux机器、Windows机器&#xff09;&#xff0c;也可以实现虚拟…

【hcie-cloud】【20】容器详解【容器介绍,容器工作机制、容器常用命令说明】【上】

文章目录 前言容器是什么虚拟化技术的四个特点容器也是一种虚拟化技术容器是怎么实现虚拟化的&#xff1f;容器对比虚拟机有哪些优势&#xff1f;容器对比虚拟机有哪些不足&#xff1f;容器不仅是一种虚拟化技术&#xff0c;更重要的是一种应用打包机制容器提供的是PaaS服务常见…

SSH远程访问出现Permission denied(password)解决方法

首先&#xff0c;这个不是密码输错了的问题&#xff1b; 1、在主机先ping一下服务器 ping XXX.XXX.XX.XXX (服务器ip地址) 如果pin成功了&#xff0c;说明可以进行连接 查看服务器的ip ifconfig2、主机连接服务器 &#xff08;服务器的ip&#xff09; ssh testXXX.XXX.XX.…

Java中SpringBoot组件集成接入【MQTT中间件】

Java中SpringBoot组件集成接入【MQTT中间件】 1.MQTT介绍2.搭建MQTT服务器1.Windows2.Ubuntu3.Docker4.其他方式3.mqtt可视化客户端MQTTX及快速使用教程4.SpringBoot接入MQTT1、maven依赖2、MQTT配置3、MQTT组件具体代码1.定义通道名字2.消息发布器3.MQTT配置、生产者、消费者4…

线扫相机品牌汇总(国外+国内)

线扫相机品牌汇总(国外+国内) 行者 ​ 热爱生活 22 人赞同了该文章 线扫相机也叫做线阵相机,和面阵相机一样,都是重要的工业相机。 线扫相机正如其名字那样,拍照时像扫描一样,相机和被拍照物体有相对匀速运动。 Perhaps the most common example of line scan imagin…

如何顺滑使用华为云编译构建平台?

这两年平台构建服务需求越来越大&#xff0c;却一直苦于找不到一些指南&#xff0c; 这里特意写了一篇&#xff0c; 对在学习代码阶段和新手程序员朋友也蛮友好&#xff0c; 配置真的也不难&#xff0c; 也特别适合想尝试从0到1做个APP的朋友了。 以华为云的CodeArts Build为例…

Mac/Linux虚拟机CrossOver2024新版下载使用教程

CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件&#xff0c;该软件可以让用户在mac是上直接运行windows软件&#xff0c;本文为大家带来的是CrossOver Mac版安装教程&#xff01; CrossOver Mac-安装包下载如下&#xff1a;http…
最新文章