Kernelのコアダンプファイルを解析するのに、crashコマンドが便利だという話を聞いたので、練習として触ってみました。
手元にCentOS 5のマシンがあるので、それを使います。
解析にあたってkernelのデバッグ情報がいるので、debuginfoのRPMをインストールします1。
$ 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を統合したやつだそうで2、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 <modprobe_path>: das
-
crash> show convenience
-
$tmp = 24873000
-
$__ = void
-
$_ = (examine_i_type *) 0xc0680be0 "/sbin/modprobe"
-
crash> exit
gdbスクリプトをsourceで読み込むこともできる。
まだ、まともな使い方は全然してないけど、Debug Hacksにいろいろ書いてあるので、それを読みながらやる予定。
![]() |
Debug Hacks -デバッグを極めるテクニック&ツール |
| レビューを見る | |
| 欲しいものリストに追加 | |
| 価格:3360円 在庫あり。powered by Amazon.co.jp |
- 最初、yumでinstallしたら、なぜか2.6.18-92.1.6.el5.centos.plusが入りました。kernelバージョンと合ってないので、rpmコマンドで入れなおし。 [↩]
- Crash WhitepaperのAbstract参照 [↩]


