2011-02-14 20 views
10

¿Hay una mejor manera de depurar las impresiones en el kernel de Linux?¿Impresiones de depuración del kernel de Linux?

En este momento ensuciando el código con:

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

que no es muy limpio.

Debería haber una manera para que toda la fila sea #ifdef: ed de alguna manera agradable.

+0

quizás pueda echar un vistazo a [esta pregunta] (http://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are-used/4966975 # 4966975) – Kevin

+0

Kevin: Gracias, pero no es exactamente lo que estoy buscando. Estoy buscando una forma de lidiar con las impresiones de depuración reales, no cómo ejecutar un depurador. – user616128

Respuesta

15

Uso

/* 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"); 

como base (la práctica estándar). A continuación, puede agregar __FILE__ o __LINE__ a la definición pr_fmt si es necesario.

+0

¿Entiendo esto correctamente? pr_ () ":" ¿Eso funcionaría? ¿No tengo que invocar también a prinkt()? – user616128

+0

No necesita repetir el nombre del módulo en absoluto. pr_devel llama a printk. Para deletrearlo, '#define pr_fmt (fmt) KBUILD_MODNAME": "__FILE__": "__LINE__": "fmt', más' pr_devel ("cosas y% p \ n", somepointer) '. – user611775

+1

estoy usando la misma sintaxis pero estoy consiguiendo un error: de error: se esperaba ')' antes numéricos constantes tengo esto en mi código: 'pr_fmt #define (FMT) KBUILD_MODNAME ":" __FILE__ ":" __LINE__ ":" fmt' (antes de cualquier #include) y en el código 'pr_devel (" XXX \ n ");' – brokenfoot

2

Si esto es para la depuración rápida, solo printk() funciona bien.

Si esto es para la depuración en una situación más de producción, tal vez utilice pr_debug(), por lo que los mensajes se pueden habilitar en tiempo de ejecución.

De todos modos, ("% s: xxx", func) suele ser suficiente. Estos nombres de archivos y líneas se volverán molestos muy pronto. Esta es también la razón por la que no ha encontrado ninguna solución "estándar", porque no la hay.

Cuestiones relacionadas