Friday, July 18, 2014

Debuggeando Procesos y Servicios desde el momento de su ejecución.

Depurar procesos, servicios, etc es una tarea común en Software Development in Test y Development en si, pues nos permite aislar los bugs para de esta forma poder corregirlos.

La tarea a simple vista es simple, pues si queremos depurar procesos corriendo simplemente se utiliza Debug->Attach To Process, escogiendo el proceso en cuestión y podemos depurar como se desee.

El problema radica cuando el inicio de un proceso o ejecutable no depende de nosotros, como ser un servicio, o un worker process, o procesos en lote que se inician aleatoriamente, y el problema o crash ocurre directamente al momento de tan solo iniciarlos no dando tiempo para poder hacerles attach.

En este caso existe una solución simple:
  1. Abrir el registro del sistema: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  2. Ejemplo, queremos que el proceso mspaint.exe se inicie para ser depurado desde un principio, para lo cual configuramos como se ve en la figura.
  3. En este caso queremos que nuestro debugger por defecto sea Visual Studio, para lo cual creamos una clave de registro del tipo string que se llame Debugger el cual contiene vsjitdebugger.exe como se muestra en la figura:
  4. A partir de este momento cada ves que se inicie nuestra aplicación se iniciará preguntando en que proyecto de Visual Studio nuestra aplicación puede ser depurada. Esto es aplicable para debuggers como Procdump. y windbg y de esta forma no perderemos los bugs que se producen nada más al iniciarse la aplicación
Nota: En servicios es necesario cambiar su modo a interactivo para de esta forma poder depurarlos de forma adecuada, esto se hace simplemente configurando en services.msc, de acuerdo a lo requerido. Pueden existir casos en que el servicio se inicia en una sesión distinta a nuestra sesión, en estos casos debe aplicarse debugging remoto vía pipes o vía tcp, el cual es aplicable a Windows Debugger, este caso se verá más adelante (especialmente pasa con Windows 8.1)

No comments:

Post a Comment