Board logo

标题: kdump 的亲密战友 crash(2) [打印本页]

作者: look_w    时间: 2018-6-18 12:19     标题: kdump 的亲密战友 crash(2)

crash 内置命令简介crash 命令行启动后,可以通过一些内置命令来打印系统崩溃前的信息。
bt - backtracebt 命令用于查看系统崩溃前的堆栈等信息,这是系统调试中非常常用和好用的一个命令。
清单 2. bt 命令结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
crash> bt
PID: 2860   TASK: c0000000677e9550  CPU: 0   COMMAND: "bash"

R0:  0000000000000001    R1:  c0000000018978b0    R2:  c00000000061c460
R3:  c000000001897920    R4:  0000000000000000    R5:  0000000000000000
R6:  0000000000019e07    R7:  0000000000000000    R8:  000000000a000000
R9:  c000000072938d80    R10: c0000000006b5d58    R11: c000000000740178
R12: 0000000000000000    R13: c00000000054ea80    R14: 00000000100d0000
R15: 0000000000000000    R16: 00000000100e2ab8    R17: 00000000100b0000
R18: 00000000100d0000    R19: 00000000100d0000    R20: 0000000000000000
R21: 0000000000000000    R22: 00000000100e8a28    R23: 0000000000000000
R24: 8000000000009032    R25: 0000000000000000    R26: 0000000000000000
R27: 0000000000000063    R28: 0000000000000006    R29: 0000000000000000
R30: c00000000058bfe8    R31: c0000000005a5ed0
NIP: c00000000009d9b0    MSR: 8000000000001032    OR3: c000000001897ab0
CTR: c00000000028b6ec    LR:  c00000000028b708    XER: 0000000000000005
CCR: 0000000000000006    MQ:  0000000000000000    DAR: c0000000005a5ed0
DSISR: c000000001897b10     Syscall Result: 0000000000000000
NIP [c00000000009d9b0] .crash_kexec
LR  [c00000000028b708] .sysrq_handle_crashdump

#0 [c0000000018978b0] .crash_kexec at c00000000009d9e0
#1 [c000000001897a90] .sysrq_handle_crashdump at c00000000028b708
#2 [c000000001897b10] .__handle_sysrq at c00000000028b1fc
#3 [c000000001897bc0] .write_sysrq_trigger at c00000000015eadc
#4 [c000000001897c50] .proc_reg_write at c000000000156670
#5 [c000000001897cf0] .vfs_write at c0000000000fd490
#6 [c000000001897d90] .sys_write at c0000000000fdc00
#7 [c000000001897e30] syscall_exit at c0000000000086a4
syscall  [c00] exception frame:
R0:  0000000000000004    R1:  00000000ffb6f820    R2:  00000000f7fe95c0
R3:  0000000000000001    R4:  00000000f7d70000    R5:  0000000000000002
R6:  0000000000000001    R7:  ffffffffffffffff    R8:  0000000000000000
R9:  0000000000000000    R10: 0000000000000000    R11: 0000000000000000
R12: 0000000000000000    R13: 00000000100dc8e8    R14: 00000000100d0000
R15: 0000000000000000    R16: 00000000100e2ab8    R17: 00000000100b0000
R18: 00000000100d0000    R19: 00000000100d0000    R20: 0000000000000000
R21: 0000000000000000    R22: 00000000100e8a28    R23: 0000000000000000
R24: 0000000000000001    R25: 00000000100e9718    R26: 0000000000000000
R27: 0000000000000002    R28: 000000000ff703f8    R29: 00000000f7d70000
R30: 000000000ff6fff4    R31: 0000000000000002
NIP: 000000000fec0988    MSR: 000000000000d032    OR3: 0000000000000001
CTR: 000000000fe59270    LR:  000000000fe592dc    XER: 0000000000000000
CCR: 0000000040242442    MQ:  00000000010b6c30    DAR: 00000000f7d70000
DSISR: 0000000042000000     Syscall Result: 0000000000000000

crash>




如上输出中,以“# 数字”开头的行为调用堆栈,即系统崩溃前内核依次调用的一系列函数,通过这个可以迅速推断内核在何处崩溃。
log - dump system message bufferlog 命令可以打印系统消息缓冲区,从而可能找到系统崩溃的线索。log 命令的截图如下(为节省篇幅,已将部分行省略):
清单 3. log 命令结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
crash> log
Crash kernel location must be 0x2000000
Using pSeries machine description
Page orders: linear mapping = 24, virtual = 16, io = 12
Found initrd at 0xc000000001500000:0xc000000001c90400
Partition configured for 2 cpus.
Starting Linux PPC64 #1 SMP Tue Jan 24 20:12:50 EST 2012
-----------------------------------------------------
ppc64_pft_size                = 0x19
physicalMemorySize            = 0x80000000
ppc64_caches.dcache_line_size = 0x80
ppc64_caches.icache_line_size = 0x80
htab_address                  = 0x0000000000000000
htab_hash_mask                = 0x3ffff
-----------------------------------------------------
Linux version 2.6.18-307.el5 (mockbuild@ppc-001.build.bos.redhat.com)
(gcc version 4.1.2 20080704 (Red Hat 4.1.2-50)) #1 SMP Tue Jan 24 20:12:50 EST 2012
[boot]0012 Setup Arch
Node 0 Memory: 0x0-0x80000000




ps - display process status informationps 命令用于显示进程的状态,(如图)带 > 标识代表是活跃的进程。ps 命令的截图如下(省略部分行):
清单 4. ps 命令结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
crash> ps
  PID    PPID  CPU       TASK        ST  %MEM     VSZ    RSS  COMM
     0      0   0  c00000000054e190  RU   0.0       0      0  [swapper]
     0      1   1  c00000007ff15150  RU   0.0       0      0  [swapper]
     1      0   1  c00000007ff15960  IN   0.1    4672   2688  init
     2      1   0  c00000007ff14940  IN   0.0       0      0  [migration/0]
     3      1   0  c00000007ff14130  IN   0.0       0      0  [ksoftirqd/0]
     4      1   0  c00000007ff13920  IN   0.0       0      0  [watchdog/0]
     5      1   1  c00000007ff13110  IN   0.0       0      0  [migration/1]
     6      1   1  c00000007ff12900  IN   0.0       0      0  [ksoftirqd/1]
     7      1   1  c00000007ff120f0  IN   0.0       0      0  [watchdog/1]
     8      1   0  c00000007ff118e0  IN   0.0       0      0  [events/0]
     9      1   1  c00000007ff1ba20  IN   0.0       0      0  [events/1]
    10      1   1  c00000007ff110d0  IN   0.0       0      0  [khelper]
   139      1   0  c0000000015822f0  IN   0.0       0      0  [kthread]
   143    139   0  c000000001c6eb00  IN   0.0       0      0  [kblockd/0]
   144    139   1  c000000001580ac0  IN   0.0       0      0  [kblockd/1]
   145    139   0  c000000001c6f310  IN   0.0       0      0  [cqueue/0]
   146    139   1  c0000000015802b0  IN   0.0       0      0  [cqueue/1]
   150    139   0  c00000007ff1e270  IN   0.0       0      0  [khubd]
   152    139   0  c00000007ff1ea80  IN   0.0       0      0  [kseriod]
   169      1   1  c000000001c62170  IN   0.0       0      0  [rtasd]
   209    139   0  c00000007f4ca370  IN   0.0       0      0  [khungtaskd]
>  1771      1   1  c000000001c36a80  RU   0.1    4096   2240  syslogd




dis - disassembling instructiondis 命令用于对给定地址的内容进行反汇编。dis 命令的截图如下:
清单 5. dis 命令结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
crash> dis -l c000000000255900
/usr/src/debug/kernel-ppc64-3.0.8/linux-3.0/fs/proc/mmu.c: 47
0xc000000000255900 <.get_vmalloc_info+112>:     ld      r10,8(r11)
5.5 struct – view data struct
struct 命令用于查看数据结构的定义原型。命令截图如下:
crash> struct -o vm_struct
struct vm_struct {
  [0] struct vm_struct *next;
  [8] void *addr;
[16] long unsigned int size;
[24] long unsigned int flags;
[32] struct page **pages;
[40] unsigned int nr_pages;
[48] phys_addr_t phys_addr;
[56] void *caller;
}
SIZE: 64






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0