crashコマンド使ってみた

Kernelのコアダンプファイルを解析するのに、crashコマンドが便利だという話を聞いたので、練習として触ってみました。

手元にCentOS 5のマシンがあるので、それを使います。

解析にあたってkernelのデバッグ情報がいるので、debuginfoのRPMをインストールします最初、yumでinstallしたら、なぜか2.6.18-92.1.6.el5.centos.plusが入りました。kernelバージョンと合ってないので、rpmコマンドで入れなおし。

 $ uname -a
Linux localhost.localdomain 2.6.18-128.1.16.el5 #1 SMP Tue Jun 30 06:10:28 EDT 2009 i686 i686 i386 GNU/Linux

 $ wget http://debuginfo.centos.org/5/i386/kernel-debuginfo-2.6.18-128.1.16.el5.i686.rpm
 $ wget http://debuginfo.centos.org/5/i386/kernel-debuginfo-common-2.6.18-128.1.16.el5.i686.rpm
 $ rpm -ivh kernel-debuginfo-common-2.6.18-128.1.16.el5.i686.rpm kernel-debuginfo-2.6.18-128.1.16.el5.i686.rpm

んで、crashコマンド実行。
SVR4 UNIXのcrashコマンドをベースにGDBを統合したやつだそうでCrash WhitepaperのAbstract参照、GDBになじんでる私には結構使いやすいです。
[CODE]
$ crash
KERNEL: /usr/lib/debug/lib/modules/2.6.18-128.1.16.el5/vmlinux
DUMPFILE: /dev/crash
CPUS: 1
DATE: Mon Jul 13 02:17:05 2009
UPTIME: 06:52:42
LOAD AVERAGE: 0.16, 0.03, 0.01
TASKS: 86
NODENAME: localhost.localdomain
RELEASE: 2.6.18-128.1.16.el5
VERSION: #1 SMP Tue Jun 30 06:10:28 EDT 2009
MACHINE: i686 (1197 Mhz)
MEMORY: 758.9 MB
PID: 3848
COMMAND: “crash”
TASK: ef67c000 [THREAD_INFO: d9120000]
CPU: 0
STATE: TASK_RUNNING (ACTIVE)
crash> set 1
PID: 1
COMMAND: “init”
TASK: c16f5aa0 [THREAD_INFO: c16f6000]
CPU: 0
STATE: TASK_INTERRUPTIBLE
crash> p $tmp = jiffies
$1 = 24873000
crash> x modprobe_path
0xc0680be0 : das
crash> show convenience
$tmp = 24873000
$__ = void
$_ = (examine_i_type *) 0xc0680be0 “/sbin/modprobe”
crash> exit
[/CODE]
gdbスクリプトをsourceで読み込むこともできる。
まだ、まともな使い方は全然してないけど、Debug Hacksにいろいろ書いてあるので、それを読みながらやる予定。
[amazon ASIN=’4873114047′ TYPE=’banner’]