2011-02-14 3 views
10

Linux 커널에서 출력물을 디버깅하는 더 좋은 방법이 있습니까? 매우 깨끗하지Linux 커널 디버그 출력물?

printk(KERN_DBG "%s:%d - %s() <message>", __FILE__, __LINE__, __FUNCTION__); 

:

는 지금과 코드를 지르고.

행 전체를 #ifdef : 좋은 방법으로 편집해야합니다.

+0

어쩌면 당신은 [이 질문에] 걸릴 수 있습니다 (http://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are-used)/4966975 # 4966975) – Kevin

+0

Kevin : 고마워요,하지만 제가 찾고있는 것이 아닙니다. 디버거를 실행하는 방법이 아니라 실제 디버그 출력물을 다루는 방법을 찾고 있습니다. – user616128

답변

15

사용 근거로

/* At the top of the file, before any includes */ 
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 

#include <linux/printk.h> 

/* in code... */ 
pr_devel("foobar happened\n"); 

(표준 연습). 그런 다음 또는 __LINE__pr_fmt 정의에 추가 할 수 있습니다.

+0

이 비트를 올바르게 이해합니까? pr_ () ":" 그게 가능할까요? 나는 prinkt()도 호출해야하지 않습니까? – user616128

+0

모듈 이름을 전혀 반복하지 않아도됩니다. pr_devel이 printk를 호출합니다. "#define pr_fmt (fmt) KBUILD_MODNAME": "__FILE__": "__LINE__": "fmt', pr_devel ("stuff 및 % p \ n ", somepointer)'. – user611775

+1

나는 동일한 구문을 사용하고 있지만 오류가 점점 오전 : 오류 : '#DEFINE의 pr_fmt (FMT) KBUILD_MODNAME ""__FILE__ ":"__LINE__ ')'예상 숫자 상수 I가이 내 코드의 이전을 ":"fmt' (앞에 # 포함) 코드 pr_devel ("XXX \ n"); ' – brokenfoot

2

빠른 디버깅을위한 것이라면 printk() 만 잘 작동합니다.

더 많은 프로덕션 환경에서 디버깅하는 경우 pr_debug()를 사용하면 런타임에 메시지를 사용할 수 있습니다.

("% s : xxx", func) 일반적으로 충분합니다. 이 파일 이름과 행 번호는 곧 매우 성가 시게됩니다. 이것은 또한 "표준"솔루션을 찾지 못한 이유입니다.