A continuación encontrarás, traducido al castellano, la entrada escrita originalmente por Wiliam Yu y publicada en el blog de Xojo.
A partir de Xojo 2022r2 tienes la opción de generar archivos Program Database (PDB) en las compilaciones de tus programas Windows de 64 bits. Si no estás familiarizado con este tipo de archivos PDB, o de como se utilizan, entonces este artículo te ayudará a entender mejor en qué medida te resultarán de ayuda a la hora de depurar.
Si bien nuestro depurador es una herramienta potente a la hora de que puedas ubicar los bugs en tus programas, en otras ocasiones pueden darse situaciones más complejas y que van más allá de lo que puede ser manejado desde el depurador. Es en estas ocasiones donde los archivos PDB vendrán al rescate.
Entonces, ¿qué es un archivo PDB? En resumen, los archivos PDB son un formato de archivo desarrollado por Microsoft para el almacenamiento de información de depuración sobre un programa. Lo más importante es cómo mapea cada dirección de una función al nombre equivalente de dicha función. Veamos un simple ejemplo para comprender cómo se ve cuando no tenemos la ayuda de un PDB.
El Código Problemático
Var mb As New MemoryBlock(8) mb.Int64Value(0) = 1 mb = mb.Ptr(0) // En este punto el MemoryBlock está apuntando a la ubicación 0x1 // de la memora, la cual no debería de ser accesible mb.StringValue(0, 4) = "Test"
En este ejemplo estamos causando una salida de la aplicación al acceder a una posición de la memoria que no está accesible. Añade el código problemático a cualquier parte de tu programa, como por ejemplo el evento Opening o en el evento Pressed de un PushButton. Si lo ejecutas en el depurador verás que la app se limita a salir, junto con el depurador. Dado que nuestro depurador también ha fallado aquí, intentemos con la app WinDbg de Microsoft y veamos como podemos obtener más información.
WinDbg
Si aun no tienes WinDbg instalado, puedes descargarlo desde la Tienda de Microsoft desde este enlace.
Para muchos desarrolladores Windows esta es una herramienta genial (y gratuita) que te ayuda a la hora de ubicar estos cuelgues molestos de las aplicaciones. Para usarlo, compila la app Xojo que incluye el código problemático. Ejecuta WinDbg y dirígelo al ejecutable a lanzar. Una vez que se haya cargado el proceso en WinDbg, pulsa el botón Go para que provoque el cuelgue.
Con la app colgada, verás el trazo de la pila más reciente con algunas de las últimas funciones invocadas antes de que se produjese el cuelgue. Así es como se verá el trazado de la pila cuando no existe un PDB:
Dado que el depurador carece de la información necesaria para mapear las direcciones a una función en particular, este sólo reportará esta dirección aleatoria… lo cual no resulta de mucha ayuda.
Generar el Archivo PDB
Compila ahora nuevamente la app pero, en esta ocasión, crearemos un archivo PDB. Esta opción está disponible en los ajustes Advanced en Xojo 2022r2 y posterior.
Ejecuta nuevamente la app desde WinDbg. Cuando se produzca el cuelgue de la app, WinDbg buscará un archivo PDB (nota: puede ajustarse para que lo busque en distintas ubicaciones pero, por omisión, lo buscará en el mismo directorio en el que se encuentre el ejecutable). En esta ocasión, cuando la app se cuelgue obtendrás un trazado de la pila más legible.
PDBs en el Mundo Real
Si bien el escenario que hemos utilizado como ejemplo no es el más común en el mundo real, debería de darte una idea de cómo un archivo PDB puede ayudarte en las tareas de depuración. En un escenario del mundo real, tú como desarrollador, probablemente almacenes los PDBs internamente, quizá en un servidor en algún lado. Cada vez que compiles una app para su despliegue (por ejemplo, cuando vayas a publicar tu app al público) deberías de mantener estos PDB en alguna parte. Cuando tu cliente/usuario experimente algún tipo de cuelgue con tu app, puedes indicarle que te envíe un minidump. El mismo principio se aplica a los ejecutables y los minidumps, sólo has de cargarlo y ejecutarlo. Sin embargo, la única diferencia es que el minidump puede requerir de más ayuda para ubicar el archivo PDB correcto.
Para obtener más información sobre este tema, puedes consultar este enlace.