sábado, 23 de mayo de 2009

Depurando el Sistema (V) - raddr2line

Generalmente, los logs de ReactOS pueden seguirse fácilmente, ya que en el mismo se nos muestra la parte exacta del código fuente en donde se ha producido este fallo, como cualquier entorno de desarrollo.


Pero hay otras veces, donde tan sólo se nos muestra un nombre de archivo, seguido por un ininteligible número hexadecimal (que en realidad se trata de una posición de memoria), como por ejemplo <pci.sys:3a22c>



Bueno, ¿Y qué hacemos con esto?¿cómo convertimos esta información en algo útil? Los desarrolladores de ReactOS se pusieron manos a la obra. Buscando buscando, encontraron una herramienta que, aun no siendo lo que necesitaban, podría ayudarles a conseguir su objetivo. La herramienta en cuestión fue addr2line, un comando Linux que hacía exactamente  lo que se necesitaba para ReactOS. Es decir, convertía direcciones de memoria en números de línea de código fuente. Pero, la herramienta Linux se basaba en informacion de depuración en el formato establecido por la fundación GNU que, obviamente, es distinto al formato de Microsoft. Y si queremos un 100% de compatibilidad, habrá que usar el mismo formato que Microsoft.


Bueno, los desarrolladores es pusieron el mono de trabajo (que aun no se han quitado, si no es para lavarlo ;) ) y crearon la herramienta raddr2line.


A modo de curiosidad, decir que en realidad, en una depuración de ReactOS, el hecho de que a veces se nos muestre directamente un nombre de fichero con su linea de código se debe a que la traduccion de la que hemos hablado está integrada y habilitada para esa pieza del código.


Raddr2line está integrado en la versión de RosBE para Windows, no así en la versión para Unix/Linux, donde tendremos que compilarlo por nuestra cuenta. Tranquilos, no os asustéis, la compilación es tan sencilla como make raddr2line. Es decir, raddr2line es una herramienta que se usa desde el entorno RosBE, no desde el depurador kdbg, ni desde la linea de comandos de ReactOS.


En la versión para Unix, tendréis que buscar en primer lugar la herramienta raddrline, y colocaros en el directorio donde se encuentre. En la versión para Windows, es posible usar el comando desde el directorio raiz del código fuente de ReactOS. Pero, para que la información proporcionada por raddr2line sea útil, es obligatorio seguir estos pasos:




  1. Compilar ReactOS. No digo crear el live cd, ni el boot cd; basta con crear los archivos binarios. Es decir, ejecutar simplemente make

  2. Asegurarse de que la revisión de ReactOS que estamos depurando es la misma que hemos compilado con el RosBE. A veces las direcciones varían de una revisión a otra, lo que podría invalidar el esfuerzo realizado... lo cual molesta bastante.

  3. La herramienta debe ejecutarse en el directorio donde se encuentre el archivo en cuestión. Es decir, tenéis que buscar el archivo, colocaros en su directorio, y realizar la traducción. Por supuesto, eso supone tener que cambiar de directori ocon cada archivo a traducir. Es tedioso, pero os aseguro que más tedioso es el programar ese archivo....


Y por último, ya sólo nos queda ejecutar la aplicación. Para ello, simplemente:



radd2line archivo direccion

Y mucha suerte :)

0 comentarios:

Publicar un comentario