jueves, 26 de marzo de 2009

Depurando el sistema (II) - Los logs de depuración

En la entrada anterior de la serie vimos en qué consistía la BSOD (useasé, el pantallazo azul) y cómo los desarrolladores de ReactOS pueden sacar partido de la información que el kdbg (kernel debugger, depurado del kernel) les proporciona acerca de dichos pantallazos.


Pero eso no es todo. Para empezar, podemos ejecutar una serie de comandos que nos permitirán sacar información no sólo de los pantallazo azules, sino de cualquier error que impida la ejecución de programas, comandos que veremos más adelante.  En este post, veremos cómo son realmente los logs que muestra el kdbg, y la forma general de ver dichos logs.





Empezamos con una pregunta sencilla: ¿Qué es un log de depuración? Podría decirse que son puntos colocados

[caption id="attachment_458" align="alignleft" width="300" caption="Esto es un log normal de ReactOS"]Esto es un log normal de ReactOS[/caption]

estratégicamente en el código fuente para que el desarrollador pueda seguir la ejecución del programa mientras éste corre. Sí, básicamente lo que hace Microsoft en sus compiladores Visual Basic 6, o Visual Studio .NET, por ejemplo. Pero, en este caso, no hablamos de ayudandonos de compiladores, sino en la ejecución del propio sistema operativo sobre una máquina, ya sea real o virtual. En la imágen de la izquierda podéis ver un log de ReactOS durante un arranque normal.


Cuando el sistema falla, en una situación normal veríamos el pantallazo azul, indicativo de que tenemos que apagar el equipo y volver a encenderlo tirando de interruptor. No hay otra manera de que el sistema siga funcionando. Pero, antes de eso, si usamos el depurador, podemos seguir enviando ordenes al kdbg, y para ello, como se muestra en la imagen de la derecha, el depurador de núcleo muestra un prompt (parecido al prompt normal de sistema), que estará esperando a que le digamos qué queremos hacer.




[caption id="attachment_459" align="alignright" width="300" caption="Log generado al producirse un pantallazo azul en ReactOS. Fijáos en el prompt del kdbg."]Log generado al producirse un pantallazo azul en ReactOS[/caption]

Órdenes útiles para la depuración del sistema

¡¡OJO!! Estos comandos no se ejecutan sobre la consola donde estemos visualizando el log. Debemos introducir los comandos en la máquina que esté corriendo ReactOS en ese momento. "¿Eing? ¿comooor? ¿pero no está colgada?" No exactamente. Cuando tenemos activado el depurador, la máquina está esperando que le introduzcamos uno de estos comandos. Esa es la razón por la cual no vemos la pantalla azul.



1.- bt

Es nuestra principal baza cuando se produce un error del sistema, y salta el kdbg. "bt" es la abreviatura de "backtrace", o sea, realiza una "marcha atrás" de los últimos pasos que se han dado en el sistema antes del error.



2.- set condition * first always|kmode|umode|never

¿Dije antes que el kdbg únicamente salta cando se produce el "pantallazo azul"? Eso no es del todo cierto, asi que tendréis que disculparme el descuido. En realidad, el nivel de sensibilidad del depurado es configurable, lo que ocurre es que en el arranque, ese nivel se sitúa en un punto en el cual únicamente se devuelve el control en caso de fallo de algún componente a nivel de núcleo (kmode). Las otras opciones son:




[caption id="attachment_460" align="alignleft" width="300" caption="Uso del comando bt del depurador y salida por pantalla"]Uso del comando bt del depurador y salida por pantalla[/caption]

  • umode : En este nivel el depurador salta en cualquier error que provoque un incorrecto funcionamiento de aplicaciones de usuario. Más técnicamente, salta, además de en los pantallazos azules, en errores producidos en el modo usuario (user mode).

  • always: No hay mucho que explicar, salta en cualquier pequeño fallo del sistema, por ínfimo que pueda parecer.

  • never: tampoco requiere explicación, ¿verdad? ;)


3.- cont

Cuando hemos provocado los congelamientos del sistema mediante el comando anterior, este comando permite cont-inuar ( ;)) con la ejecución normal del sistema.



¡¡OJO!! Estos comandos no se ejecutan sobre la consola donde estemos visualizando el log. Debemos introducir los comandos en la máquina que esté corriendo ReactOS en ese momento. "¿Eing? ¿comooor? ¿pero no está colgada?" No exactamente. Cuando tenemos activado el depurador, la máquina está esperando que le introduzcamos uno de estos comandos. Esa es la razón por la cual no vemos la pantalla azul. Si, ya sé que es el mismo párrafo que escribí antes, pero ¿a que alguno de vosotros ya pensaba hacerlo mal? ;)

0 comentarios:

Publicar un comentario