본문 바로가기

유용한 디버깅 팁/crash utility and vmcore

[리눅스커널][디버깅] Red Hat Crash-Utility(크래시 유틸리티) 설치!

리눅스 커널 동네에서 전 세계적으로 쓰고 있는 디버깅 툴을 소개하고자 합니다.
 
레드헷의 앤더슨이란 형님이 만든 오픈 소스로 배포한 리눅스 크래시(커널 패닉)을 분석할 수 있는 툴인데요, 
리눅스 커널 커뮤니티에서도 이 툴을 활발히 쓰고 있죠.
 
소스를 좀 받아 볼까요? 리눅스 머신에서 아래 커맨드로 소스를 땡겨옵니다.
 
소스를 받고 나서 아래 명령어로 빌드를 해요.
ARM machine인 경우
make target=ARM
make target=ARM extensions
 
X86인 경우
make target=X86_64
make target=X86_64 extensions
 
이제 trace command란 오픈소스 툴을 가져올 차례입니다. 이 툴로 ftrace 각 event를 파싱할 수 있어요.
 
빌드 명령어는 초간단, 그냥 make 만 때리면 되요.
 
자자, 이제 좀 정리해볼까요?
 
crash tool을 빌드한 결과물은 crash, trace command을 빌드한 이미지는 trace-cmd 거거든요.
 
/bin/CrashTool 폴더에 각각 결과물을 복사하구요. 
"make target=ARM extensions" 빌드하면 생성되는 extensions 폴더도 잊지 마세요.
austin.kim@Linux:~/bin/CrashTool$ ls -l
total 52400
-rwxrwxrwx 1 austin.kim home001  8536852 Jul 13 11:30 crash
drwxrwxrwx 4 austin.kim home001     4096 May  4 19:20 extensions
-rwxrwxrwx 1 austin.kim home001   868663 Feb 15 09:23 trace-cmd
 
crash_load.sh란 파일을 아래와 같이 만들고, "./crash_load.sh vmlinux" 명령어를 입력하면 실행 끝이죠.
#!/bin/sh
export CRASH_EXTENSIONS=/home001/austin.kim/bin/CrashTool/extensions
export TRACE_CMD=/home001/austin.kim/bin/CrashTool/trace-cmd 
/home001/austin.kim/bin/CrashTool/crash coredump0.BIN@0x0,coredump1.BIN@0xc0000000 -p 4096 -m phys_base=0x80000000 --no_panic --smp $1
 
실행 결과 화면입니다. 참 쉽죠.
      KERNEL: vmlinux
   DUMPFILES: /var/tmp/ramdump_elf_1X1HKt [temporary ELF header]
              DDRCS0.BIN
              DDRCS1.BIN
        CPUS: 4
        DATE: Wed Nov 29 15:24:00 2017
      UPTIME: 00:35:30
LOAD AVERAGE: 6.66, 7.02, 5.86
       TASKS: 363
    NODENAME: localhost
     RELEASE: 3.18.66-g715eee2
     VERSION: #2 SMP PREEMPT Wed Nov 29 12:37:14 KST 2017
     MACHINE: armv7l  (unknown Mhz)
      MEMORY: 2 GB
       PANIC: "kernel BUG at /src/3.18_kernel_ver/kernel/lib/list_debug.c:40!"
         PID: 0
     COMMAND: "swapper/0"
        TASK: c1917578  (1 of 4)  [THREAD_INFO: c1900000]
         CPU: 0
       STATE: TASK_RUNNING
     WARNING: reported panic task e6357840 not found
 
crash>
 
#Reference
 
 
# Reference: For more information on 'Linux Kernel';
 
디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1
 
디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2