Depurador GDB para ensamblador de ARM

En muchas ocasiones no entendemos por qué nuestro código no se ejecuta de la manera deseada, esto puede ser causado por varios motivos, entre ellos se pueden recalcar las llamadas recursivas, referencias a elementos nulos o simplemente un fallo de lógica, pero está bien es normal equivocarse, de hecho, una habilidad que se debería de desarrollar desde que se aprende a escribir código fuente es la habilidad de leer, entender y depurar código.

En esta guía veremos cómo utilizar el debugger GDB para el sistema Raspbian.

¿Qué es un debugger?

Un depurador (en inglés: debugger) es un programa usado para probar y depurar (eliminar) los errores de otros programas (el programa "objetivo"). El código a ser examinado puede alternativamente estar corriendo en un simulador de conjunto de instrucciones (ISS), una técnica que permite gran potencia en su capacidad de detenerse cuando son encontradas condiciones específicas.

Cómo utilizar GDB

Antes de utilizar GDB necesitamos saber cómo compilar nuestros archivos de tal manera que sea posible indicar que queremos cargar los símbolos de depuración para que GDB pueda interpretar el código de manera correcta.

Para el ejemplo se utilizarán 4 archivos (disponibles para descarga en este enlace):

  1. Ejemplo.s
  2. div.s
  3. count.s
  4. print.s

Estos se compilarán normalmente pero al inicio de la línea agregaremos el parámetro de los símbolos de depuración ( -g )

¿De qué trata el ejemplo?

El ejemplo consiste en imprimir un arreglo de palabras de tamaño 3, pero el error estará en que el tamaño indicado será 4, por lo tanto, tendremos un resultado más el cual será bastante diferente a lo que tenemos en el arreglo, a veces en la frustración no vemos los pequeños detalles como que estamos indicando tamaño 4 en vez de 3, por lo tanto nos daremos cuenta de ello utilizando GDB, a continuación el código del programa principal:

Ejecutar GDB

Al ejecutar la línea gdb seguido del nombre del programa ejecutable (Ejemplo), nos lleva al inicio del programa de gdb:

Listar código

En el debugger podemos listar el código de nuestro programa con la siguiente sintaxis:

list NombreArchivo.Extension:LineaInicial

Como por ejemplo:

Al ingresar el comando list div.s:1 listamos las primeras 10 líneas del archivo div.s, después al presionar la tecla enter se listan las siguiente 10.

Comando Run

Al ejecutar el comando run se ejecuta el programa y vemos el punto del ejemplo, en el arreglo existen 1,2 y 3 pero no 1090532106, se está imprimiendo un segmento de memoria que no es del arreglo. 

Crear Break points

Los puntos de parada (break points) son ubicaciones en el programa que podemos configurar sobre una línea, para el ejemplo configuramos la línea 24 del archivo Ejemplo.s :

El comando para configurar un break point es b (número de linea) como por ejemplo:

Con esto el programa hará 4 paradas en la línea donde se compara r0 con el contador de repeticiones del for.

Información de registros cuando corre el programa

Luego de correr el comando run, nos encontramos una línea después de la 24, esto es porque cuando se alcanza el break point, nos deja una línea después de la instrucción en la línea configurada para detenerse, esta iteración podemos ver que r1 (el contador) tiene el valor 1.

En esta iteración podemos ver que r1 (el contador) tiene el valor de r2 y así seguirá hasta llegar 4 y salir del for donde terminará el programa.

 

No comments

Comentarios en artículos

No comments

Nobody has submitted a comment yet.