본문 바로가기

[Debugging] Tips

(55)
[리눅스] 라즈베리 파이: coredump 추출 방법 + gdb 디버깅 방법! 이번 포스트에서는 라즈베리 파이에서 coredump가 생성되도록 설정하는 방법과 GDB로 coredump를 로딩하는 방법을 소개합니다. coredump 생성 1. coredump 파일 사이즈 설정 'ulimit -a' 명령어를 입력하면 coredump 파일의 사이즈가 출력됩니다. root@raspberrypi:/home/pi/work/test_coredump# ulimit -acore file size          (blocks, -c) 0data seg size           (kbytes, -d) unlimitedscheduling priority             (-e) 0file size               (blocks, -f) unlimitedpending signals   ..
printk 컴파일 에러 시 해더 파일 가끔 아래와 같이 printk를 추가해서 로그를 보려고 빌드를 하면, 컴파일러가 아래와 같이 에러를 토해내고 컴파일이 중지되는 경우가 있다. printk("=====!!!!!current task[%s]=======\n", current->comm); /android/kernel/arch/arm/mach-tegra/timer.c:111:58: error: dereferencing pointer to incomplete type make[3]: *** [arch/arm/mach-tegra/timer.o] Error 1 make[2]: *** [arch/arm/mach-tegra] Error 2 make[2]: *** Waiting for unfinished jobs.... CHK kernel/config_..
[Linux][Debug][T32] macro offsetof/container_of Overview When debugging ramdump with stability issues, I have been spending most of time casting various data structure as belows. v.v %s (struct task_struct*)0xC1917FCC For this matter, I made several macros to minimize the debugging time. The definition of the macro is below. sYmbol.NEW.MACRO offsetof(type,member) ((int)(&((type*)0)->member)) sYmbol.NEW.MACRO container_of(ptr,type,member) ((ty..
WalkThruStackDump_QMC_32BitARM.cmm ;**************************************************************************** ;** WalkThruStackDump_QMC_32BitARM.cmm ;** This script is designed to restore a call stack per process in ARM32 QMC Platform. ;** ;** ;** ;** when who what, where, why ;** -------------- ------------ ------------------------------------------------------ ;** 01/30/2016 austin.kim First version: This script is based upo..
TraceStackDumpWithCallstack_64BitARM.cmm ;**************************************************************************** ;** TraceStackDumpWithCallstack_64BitARM.cmm ;** This script is designed to restore a call stack per process in ARM64 bit process. ;** ;** ;** ;** when who what, where, why ;** -------------- ------------ ------------------------------------------------------ ;** 01/30/2016 austin.kim First version ;** 11/26/2016 austi..
[Linux][Kernel] T32 - 구조체 확인 (v.type) T32로 디버깅을 하다보면 struct의 선언부를 확인하고 싶을 때가 있어요. 예를 들어서 struct tty_struct 구조체의 멤버를 갑자기 확인하고 싶은 경우, "do do_struct.cmm tty_struct" 요렇게 입력하면 상세 멤버 변수를 확인할 수 있어요. struct tty_struct struct tty_struct struct(620 bytes, [0] int magic (signed 32 bits), [4] struct kref kref struct(4 bytes, [0] atomic_t refcount struct(4 bytes, [0] int counter (signed 3 [8] struct device * dev (pointer to struct device, 32 bit..
[Linux][Kernel] 전처리 Preprocess File 추출 방법 한 4년 전 인가요? 아래 코드를 열심히 분석 했었어요. 그런데 나중에 알고 보니 CONFIG_KMEMCHECK, CONFIG_LOCKDEP 컨피그 내 코드가 컴파일 되지 않는 죽은 코드라는 걸 알게 되었어요. 그 때 참 머리를 쥐어 뜯으며 자책했죠. static inline void slab_free_hook(struct kmem_cache *s, void *x) { kmemleak_free_recursive(x, s->flags); /* * Trouble is that we may no longer disable interrupts in the fast path * So in order to make the debug calls that expect irqs to be * disabled we nee..
[Linux][Kernel] T32 - Linked List 디버깅 cmm Script 리눅스 커널 데이터 스트럭쳐 내 수 많은 linked list를 확인할 수 있어요. 예를 들어 struct kset이란 구조체도 첫번 째 멤버로 list란 링크드 리스트죠. struct kset { struct list_head list; //