drltrace: la herramienta definitiva para debuggear en ReactOS
A la hora de hacer debugging a ReactOS, los testers más experimentados solemos contar con un set completo de herramientas que nos pueden hacer el trabajo algo más sencillo, desde los clásicos depuradores, pasando por los desensambladores, hasta llegar a los complejos decompiladores que pueden traducir un archivo binario a código C, pero sin duda un lugar muy especial en esa lista lo ocupan los monitores de llamadas a la API.
Un monitor de llamadas es a breves rasgos, un programa espía que se interpone entre una aplicación determinada y sus dependencias, creado especialmente para chivarte las comunicaciones entre un proceso en ejecución y el sistema operativo. Al fin y al cabo es en las APIs del sistema donde se ocultan la gran mayoría de fallos y errores, y tener un aliado que te diga qué está sucediendo tras bastidores es una ayuda invaluable cuando el debug log de ReactOS por sí solo no llega a ser suficiente.
El programa por excelencia para ese propósito es el API Monitor, sin embargo existe un pequeño gran problema: no funciona en ReactOS. Para que lo haga habría que solucionar varias cosas y esperar un buen rato, mientras tanto existe una alternativa igual de úitl pero mucho más compacta, de código abierto, y sobre todo que funciona perfectamente en ReactOS, se trata del dltrace.
Ésta pequeña aplicación de consola está basada en la librería de instrumentación dinámica de binarios DynamoRIO, dicha librería nace en la década del 2000 a partir de una colaboración entre Hewlett-Packard y el MIT para crear un toolkit de optimización de binarios, pero luego de eso muchos se percataron de que podría ser útil también para análisis de software y depuración, y así es como llegamos al dltrace.
Drltrace fué creado inicialmente por Derek Bruening, parte del equipo de DynamoRIO, y se incluía en una suite de aplicaciones llamada Dr. Memory, y aquí viene lo bonito del código abierto, y es que un desarrollador llamado Maksim Shudrak creó un fork en Github y comenzó a mejorarlo aún más, y añadiendo opciones que lo hacen verdaderamente útil para depurar en ReactOS.
La instalación es muy sencilla, al ser portable solamente debemos descargar el archivo drltrace_win32.7z y descomprimirlo con 7zip en una ubicación fácil de acceder, preferiblemente en la raíz de tu unidad de disco duro. El ejecutable se encuentra en drltrace_win32\bin y es desde ésta carpeta donde debemos invocarlo.
Usarlo es muy fácil, de hecho podemos rápidamente iniciar la depuración de, por ejemplo calc.exe de esta manera:
drltrace -no_use_config -- calc.exe
Ésto creará un archivo drltrace.calc.exe.xxxx.0000.log (donde xxxx es el número de thread) y advertidos quedan, ese fichero contendrá todas, repito: TODAS, las llamadas a la API, incluso las que se realizan entre las mismas funciones de la API (las denominadas llamadas intermodulares) invocadas desde el hilo del programa ejecutado, al final la cantidad de información que proporciona puede llegar a ser abrumadora y terminar por confundir a algún despistado, aunque afortunadamente ofrece varias opciones para reducir la cantidad de información registrada y eso lo veremos en el segundo capítulo de esta serie.