반응형
▣ 원문 출처: http://www.iamroot.org/xe/index.php?mid=Lecture&document_srl=6711
Ruby Hacking Guide 의 서장에는 소스 코드를 읽는 기법에 대한 논의가 나옵니다. http://tinyurl.com/3askrg 에서 번역된 글을 볼 수 있습니다 (기계 번역이라 매우 조악하지만).
거기에서는 코드 해석 방법을 "동적 해석"과 "정적 해석"으로 나누고 있는데요. "동적 해석"이란 실제로 코드를 수정하고 실행시켜서 그 작동을 확인하는 방법을 말합니다.
여기서 동적으로 해석하는 대상이 커널인 경우, 커널 로그 메시지를 실시간으로 보는 것이 유용한데요. 저는 PC에서 작업하는 경우 터미널 창 하나를 띄워 놓고 다음과 같은 명령을 실행합니다.
tail -F /var/log/kern.log -s 0.01
----------
이상은 그냥 잡담이고요. 제가 원래 쓰고 싶은 얘기는 지금부터입니다. 동적 해석시 제가 쓰는 팁을 하나 소개드리려 합니다.
어떤 함수를 누가 호출하는지 알고 싶은데, :cs f c (vim에서 cscope로 caller를 찾는 명령) 로도 안 잡히는 경우가 있습니다. 함수 포인터에 들어있는 걸 호출하거나 복잡한 매크로를 써서 이상하게 호출하는 경우 등입니다.
이때 저는, 해당 함수의 시작 부분에 PRINT_INFO(); 라는 줄을 삽입합니다. 그 정의는 다음과 같이 넣어 줍니다.
#include <linux/kallsyms.h>
#define PRINT_INFO()
do {
printk("%s starting( caller:", __FUNCTION__);
print_symbol("%s)n", (unsigned long) __builtin_return_address(0));
} while (0)
반응형
'【Fundamental Tech】 > Linux' 카테고리의 다른 글
Emacs Code Browser (ECB) (0) | 2011.10.07 |
---|---|
막강 디버깅 매크로 DM_PRINT() (0) | 2011.10.03 |
Linux 2.6.20 APIs - Kernel/Filesystems (0) | 2011.10.03 |
Using Cscope on large projects (example: the Linux kernel) (0) | 2011.10.03 |
아키텍처 별 Linux Kernel 분석용 ctags/cscope 태깅 정보 생성하기 (0) | 2011.10.03 |