从mdb到crash

在Solaris上,事后分析crashdump或者在线调试操作系统内核的强大工具就是mdb。当然,mdb不支持源码级的调试,只支持汇编级的调试。而在Linux (以CentOS为例),类似的工具是crash。

$ man -s8 crash
NAME
       crash - Analyze Linux crash dump data or a live system

SYNOPSIS
       crash [OPTION]... NAMELIST MEMORY-IMAGE[@ADDRESS]    (dumpfile form)
       crash [OPTION]... [NAMELIST]                         (live system form)...<snip>...

mdb的使用比crash要简单一些,因为不需要自己安装NAMELIST。但crash比mdb要好的地方在于支持源码级调试,因为跟gdb配合非常紧密。

下面将介绍如何在CentOS上使用crash分析一个crashdump文件。

第一次使用crash的感觉很蒙圈,因为搞不懂神马是NAMELIST。

注意:使用mdb进行live的调试,就不需要神马NAMELIST。很简单, -K(大K)只能在console上使用,可以让整个内核挂起。例如:

root# mdb -k    #<-- Live kernel
or
root# mdb -K    #<-- kmdb

这种情况下只能问度娘和qwant(在家上不了Google)了,幸运的是找到了Red Hat Enterprise Linux 7 Kernel Crash Dump Guide。于是按照Guide的提示一步一步来。有关kdump的简介截图如下:

1. 检查kexec-tools是否已经安装

[[email protected] tmp]# rpm -q kexec-tools
kexec-tools-2.0.7-50.el7.x86_64

我用的是CentOS 7, 默认已安装。

2. 安装system-config-kdump

[[email protected] tmp]# rpm -q system-config-kdump
package system-config-kdump is not installed
[[email protected] tmp]#
[[email protected] tmp]# yum install system-config-kdump

3. 通过GUI对kdump进行配置 (goto Applications->System Tools->Kernel crash dumps)

选Basic Settings -> Manual settings, 将New kdump Memory设置为128M, 其他都使用默认设置,然后点Apply

点击apply后,会遇到"Unable to handle kdump services"的错误,不用理会,接下来需要reboot

查看一下kdump是否active

[[email protected] tmp]# systemctl is-active kdump
failed

4. reboot

5. reboot后,再次检查kdump是否active

扩展:Solaris/Linux的工具链对比

# Solaris Linux(CentOS)
1 cc gcc
2 dbx gdb
3 mdb crash
4 dtrace systemtab, ftrace
5 truss strace

 参考资料:

1. Red Hat Enterprise Linux 7 Kernel Crash Dump Guide

2.Analyzing Linux kernel crash dumps with crash - The one tutorial that has it all

3. http://elixir.free-electrons.com/linux/v4.12-rc3/source/Documentation/kdump/kdump.txt

4. https://github.com/crash-utility/crash

时间: 2024-11-09 17:23:45

从mdb到crash的相关文章

iOS10 UIImageWriteToSavedPhotosAlbum程序奔溃crash解决办法

Xcode报错: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this

ios异常(crash)输出

最近突然想起友盟的sdk附带的一个功能:将闪退异常情况上报服务器,(stackflow,github)找了一些资料,自己写了一个demo,想起来好久没有写过blog了,顺便分享. 其实不止是ios,android逻辑也是一样的,crash日志其实是系统自带的,闪退的时候,都会将crash打印,使用ide的同学可以很明显的调试看到错误的信息,定位问题. 程序打包给用户后,我们想查看程序运行情况的话,都是通过将这些crash log写入文件中(来不及上传,建立一个链接的),在下次启动的时候顺便传送服

【腾讯Bugly干货分享】经典随机Crash之一:线程安全

本文作者:鲁可--腾讯SNG专项测试组 测试工程师 背景 Android QQ 在2016下半年连着好几个版本二灰 Crash 率都很高,如果说有新需求,一灰的 Crash 率高,还能找点理由,可是开发童鞋解过一灰的 Crash 单后,为啥二灰还有这么高的 Crash 率,我们还有覆盖全 SNG.不少外 BG 明星产品的终端稳定性测试工具 NewMonkey 随身版(NewMonkey系腾讯内部研发的测试工具,外部app有兴趣请点击这里填问卷调查申请使用)每天都在跑,更何况大多 Top Cras

EJB3.0中的session bean以及MDB解析

大型业务系统面临的主要问题就是高并发性和事务访问,客户端的数量与服务器端的分布式对象数量存在一定程度的正比关系,客户端数量越多,服务器端分布式对象也就越多,如何解决这种高并发的问题也就成了企业级架构首先要解决的问题.EJB作为一种服务器端分布式组件,为我们提供了应对策略. EJB提供了两种管理大量分布式对象的策略:实例池化和激活.下面分别对EJB组件模型中的三种模型进行一些分析. 第一种:无状态的会话Bean(Stateless session bean) Stateless session b

Swift app中的Crash捕获与处理

1. 为什么会Crash 常见的Crash原因有:访问已经被释放的内存,数组越界,使用!解包值为nil的变量.当遇到这些情况时,说明应用已经遇到了很严重的非预期错误,无法再继续运行.操作系统检测到这些非法操作时会向应用发送对应的信号,而应用对这些信号的默认处理是直接让应用退出(已信号值作为退出码).这样就出现了我们看到的Crash,闪退. 具体的信号种类和信号机制见Unix Signal 2. 如何捕获和处理Crash 在swift3.0中,我们可以通过如下调用来注册对特定信号的处理逻辑. si

Crate命令行客户端Crash

进入Crate安装目录,执行命令: ./bin/crash \connect 192.168.2.6:4200 select * from ping where probe_name = 'xjlu';

APP闪退分析及Crash日志获取

现在人们越来越离不开手机了,手机已经是我们生活的一部分了.APP也越来越多,要想让自己的APP脱颖而出,能在移动互联网时代能有一席之地,除了能满足大多数用户的刚需之外,也要让自己APP的体验做到最佳.所以APP闪退可能会导致用户的流失,所以作为研发.测试人员应该把APP的crash率降到最低.所以在测试的过程中也要特别注意闪退. 说了那么多,那么尤其对于测试人员来说,遇到crash(或偶发)应该怎么办呢?必须要把日志抓取出来,这里以Android为例: 一.手机crash之后,如果弹出的"应用程

iOS NSNotificationCenter 移除通知带来的crash

Where to remove observer for NSNotification? 在dealloc方法中移除通知观察者带来crash NSNotificationCenter中的通知消息已经发出,而观察者对象子线程释放,也就是抛送通知消息的线程和观察者对象子线程释放的线程不一致时,存在crash风险,原因是NSNotificationCenter不是线程安全的. 解决办法:尽早移除通知 或者保证释放和抛送通知在同一个线程.

使用UIImagePickerController时3DTouch引起的Crash问题的解决--备用

一.crash的场景 程序中用到UIImagePickerController时,如果在IPhone6S上运行APP,当forceTouch 一个图片时程序会crash,并附带如下crash message: * Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘+[NSObject previewingContext:viewControllerForLocation:]: unre