
- 2019/03/13 15:38
- rousalome.egloos.com/9992691
- 덧글수 : 6

핑백
Linux Kernel(4.14) Hacks : [리눅스커널][디버깅] Red Hat Crash-Utility(크래시 유틸리티) 설치 2019-03-18 13:29:47 #
... crash> #Reference디버깅이란 디버깅은 문제 해결 능력의 지름길/디버깅과 코드 학습 능력printk() dump_stack() ftrace ftrace란/ftrace는 어떻게 설정할까?/ftrace 메시지는 어떻게 분석할까? ft ... more
Linux Kernel(4.19) Hacks : [리눅스커널][디버깅] 커널 디버깅이란 무엇인가? 2019-06-01 18:47:26 #
... 툴 방법을 소개합니다. #커널 디버깅디버깅이란 디버깅은 문제 해결 능력의 지름길/디버깅과 코드 학습 능력printk() dump_stack() ftrace ftrace란/ftrace는 어떻게 설정할까?/ftrace 메시지는 어떻게 분석할까? ft ... more
Linux Kernel(4.19) Hacks : [리눅스커널][디버깅] printk에 대해서 2019-06-01 18:47:38 #
... 절에서 상세히 다룹니다. #커널 디버깅디버깅이란 디버깅은 문제 해결 능력의 지름길/디버깅과 코드 학습 능력printk() dump_stack() ftrace ftrace란/ftrace는 어떻게 설정할까?/ftrace 메시지는 어떻게 분석할까? ft ... more
Linux Kernel(4.19) Hacks : [리눅스커널][디버깅] ftrace 설정과 로그 분석하기 2019-06-01 18:48:12 #
... 다는 정도로 기억합시다. #커널 디버깅디버깅이란 디버깅은 문제 해결 능력의 지름길/디버깅과 코드 학습 능력printk() dump_stack() ftrace ftrace란/ftrace는 어떻게 설정할까?/ftrace 메시지는 어떻게 분석할까? ft ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널 디버깅과 코드 학습: 커널 디버깅용 Debugfs 드라이버 코드 2020-02-23 12:52:07 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 임베디드 디버거 전설 TRACE32 2020-02-23 12:52:09 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널 디버깅과 코드 학습: 부팅 과정에서 ftrace는 어떻게 볼까? 2020-02-23 12:52:10 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널 디버깅과 코드 학습: ftrace 는 커널 코드 분석의 안내자 2020-02-23 12:52:12 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널 디버깅과 코드 학습: ftrace 로그는 어떻게 추출할까? 2020-02-23 12:52:15 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널 디버깅과 코드 학습: ftrace는 어떻게 설정할까? 2020-02-23 12:52:24 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널 디버깅과 코드 학습: ftrace란 2020-02-23 12:52:24 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널 디버깅과 코드 학습: 디버깅과 코드 학습 능력 2020-02-23 12:52:36 #
... 은 문제 해결 능력의 지름길 * 디버깅과 코드 학습 능력 printk() dump_stack() ftrace * ftrace란 * ftrace는 ... more
덧글
-
따뜻한 순록 2021/06/08 04:11 # 답글
Thanks for the very good article.
I have a question
Is dump_stack() ==> show_stack(current, NULL) ==> same as current->stack??
If no, how to dump current->stack?
Thanks -
AustinKim 2021/06/08 20:14 #
When you want to see callstack in the kernel log,
either dump_stack() or show_stack(current, NULL) can be called.
The 'current->stack' is not used, as a way to traverse stack dump. -
따뜻한 순록 2021/06/08 04:43 # 답글
Dumped stacks using dump_stack() and show_stack(current, NULL)
- Result: Both the dumps are identical.
1) Need to know if these stack dump functions internally use [current->stack] content.
2) How to dump content of [current->stack] without using predefined dump functions.
Thanks -
AustinKim 2021/06/08 20:23 #
If you look into unwind_backtrace()[arm] or dump_backtrace()[arm64],
you will find out how it works.
https://elixir.bootlin.com/linux/v5.13-rc5/source/arch/arm/kernel/unwind.c#L459
void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk,
const char *loglvl)
https://elixir.bootlin.com/linux/v5.13-rc5/source/arch/arm64/kernel/stacktrace.c#L161
void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk,
const char *loglvl)
In both cases, 'current->stack' is not used, as a way to traverse stack dump.
BR,
Austin Kim -
kyle 2021/12/14 21:47 # 삭제 답글
안녕하세요. 블로그 잘 보고있습니다.
덤프스택은 해당지점의 콜스택을 볼수있다고 이해하였는데.
해당 콜스택으로 어떠한 통찰을 얻을 수 있을까요? 예를들어 현재 지점까지의 변수 변천사? 같은 것도 볼수있다고 생각드는데.
이외에 해당 콜스택으로 어떠어떠한 것들을 유추할 수 있는지 궁금합니다.
감사합니다. -
AustinKim 2021/12/15 09:42 #
많은 생각을 하게 하는 훌륭한 질문을 주셔서 감사합니다.
콜 스택으로는 각 함수의 스택 프레임별로 사용되는 지역 변수의 값을 우선 확인할 수 있는데요.
이 밖에 유추할 수 있는 정보는 다음과 같아요.
1. 컨텍스트
콜 스택을 보면 현재 인터럽트 컨텍스트인지 그냥 프로세스 컨텍스트인지 알 수 있어요.
다음 ftrace를 보면;
Xorg-564 [001] d.h1 2177.446811: <stack trace>
=> __traceiter_kmem_cache_alloc+0x64/0x88
=> kmem_cache_alloc+0x334/0x400
=> __sigqueue_alloc+0xd4/0x1a8
=> __send_signal+0x308/0x3e8
=> send_signal+0x70/0x130
=> do_send_sig_info+0x68/0xb0
=> group_send_sig_info+0x88/0xa8
=> kill_pid_info+0x54/0xa0
=> it_real_fn+0x30/0x108
=> __hrtimer_run_queues+0x26c/0x470
=> hrtimer_interrupt+0xfc/0x258
=> arch_timer_handler_phys+0x38/0x48
=> handle_percpu_devid_irq+0xa8/0x2a0
=> generic_handle_irq+0x38/0x50
=> __handle_domain_irq+0x9c/0x110
=> gic_handle_irq+0xb0/0xf0
=> el0_irq_naked+0x50/0x58
유저 프로세스가 실행 중에 인터럽트가 유발된 다음에 위와 같은 함수가 호출됐다고 알 수 있고요.
아래 콜 스택은;
=> __traceiter_kmem_cache_free+0x48/0x68
=> kmem_cache_free+0x430/0x538
=> file_free_rcu+0x48/0x88
=> rcu_core+0x264/0x860
=> rcu_core_si+0x18/0x28
=> __do_softirq+0x1a8/0x510
=> irq_exit+0xe8/0x108
=> __handle_domain_irq+0xa0/0x110
=> gic_handle_irq+0xb0/0xf0
=> el1_irq+0xc8/0x180
=> arch_cpu_idle+0x18/0x28
=> default_idle_call+0x58/0x1d4
=> do_idle+0x25c/0x270
=> cpu_startup_entry+0x30/0x70
=> secondary_start_kernel+0x170/0x180
커널에서 arch_cpu_idle() 함수가 실행 중에 인터럽트가 유발된 다음에,
soft irq가 실행 중이다란 정보를 확인할 수 있습니다.
마지막으로 아래 콜 스택은;
sshd-1012 [001] .... 2164.836778: <stack trace>
=> __traceiter_kmem_cache_alloc+0x64/0x88
=> kmem_cache_alloc+0x334/0x400
=> __alloc_skb+0x5c/0x190
=> sk_stream_alloc_skb+0xc0/0x250
=> tcp_sendmsg_locked+0x3a4/0xc48
=> tcp_sendmsg+0x40/0x68
=> inet_sendmsg+0x4c/0x78
=> sock_sendmsg+0x54/0x60
=> sock_write_iter+0x98/0xf0
=> new_sync_write+0x17c/0x190
=> vfs_write+0x254/0x368
=> ksys_write+0xe0/0xf8
=> __arm64_sys_write+0x24/0x30
=> el0_svc_common.constprop.2+0x9c/0x1a0
=> do_el0_svc+0x2c/0x98
=> el0_svc+0x20/0x30
=> el0_sync_handler+0x90/0xb8
=> el0_sync+0x160/0x180
시스템 콜이 유발돼 소켓에 데이터를 쓰는 동작이라는 사실을 알 수 있습니다.
2. 익셉션
현재 크래시가 유발됐는지, 인터럽트가 유발된 상태인지,
그냥 정상 동작인지도 확인할 수가 있습니다.
감사합니다.
최근 덧글