martes, 4 de febrero de 2014

Depurando el sistema (VII): Procesos e hilos

Al haber cambiado de sitio web, igual os perdéis: "¿Dónde están los séis capitulos anteriores?". Están aquí, y es muy aconsejable leérlos antes de continuar.

En anteriores entradas hemos hablado de los comandos que podemos pasarle al depurador del núcleo (kernel debugger, kdbg) para obtener logs más detallados con los que ayudar a los desarrolladores a corregir los defectos del sistema. Pero todavía podemos profundizar más aún, especialmente tratándose de un sistema multitarea y, también, multihilo.


De hecho, el kdbg permite obtener información de los procesos corriendo actualmente y, además, de los hilos corriendo actualmente. Y podemos verificar los hilos que corren por cada proceso dentro del sistema.

Para el usuario normal y corriente, es obvio saber qué aplicación es la que está colgada: la que no funciona. Pero, el desarrollador necesita saber la causa que provoca que esta aplicación no funciona, que haya dejado de responder, o que, sencillamente, se haya cerrado sin más. Para ello debe tracear (backtrace) las llamadas al sistema, las instrucciones que se han ido ejecutando en el sistema.
Pero en un sistema multiproceso, como es Windows, y por ende, ReactOS, hay muchos procesos corriendo simultáneamente. Entonces, ¿cómo distinguimos las instrucciones que pertenecen a un proceso, con las instrucciones que pertenecen a otro proceso?

kdbg>proc list

Esta instrucción lista los procesos corriendo actualmente en el sistema. Así, sabiendo cuál es el que ha fallado, podemos decir al kdbg que sólo tracee las instrucciones asociadas a ese proceso. ¿cómo lo hacemos? con la siguiente instrucción:

kdbg> proc attach <PID>

Cada proceso tiene asociado un identificativo para el sistema operativo (PID).

Pero, además, cada proceso puede tener múltiples hilos, cada uno ejecutando instrucciones distintas. Y quizá es un sólo hilo el que está fallando. Si bajamos de nivel, y queremos tracear un hilo en concreto:

kdbg> thread list <PID>
kdbg> thread attach <TID> 

Como véis, las instrucciones son muy similares a las anteriores, con pequeñás diferencias:

  • En este caso, se trata de identificadores de hilo (thread en inglés), por lo que se pone TID, en lugar de PID (process ID)
  • podemos directamente mostrar los hilos que pertenecen a un proceso específico, añadiendo PID en la primera instrucción. ¡Pero acordáos de enlazar al kdbg con ese proceso si queréis tracearlo correctamente!


0 comentarios:

Publicar un comentario