Visualizar el estado de la aplicación¶
Ya tenemos localizado el error, que podemos ver en la línea 5 de la figura anterior: el error se ha producido en la función fillMatrix
, que fue llamada con los valores de los parámetros indicados, y concretamente el fallo se ha producido en la línea 47.
Veamos el contexto del programa. Podemos ver el código en nuestro editor o usar el comando list
:
1 2 3 4 5 6 7 8 9 10 11 |
|
Question
¿Puedes encontrar el error en ese bloque de código? Inténtalo antes de seguir leyendo.
Estamos recorriendo una matriz, así que el error más común es un acceso fuera de rango. Necesitamos saber los valores de i
y j
. Para ver los valores de las variables podemos usar la orden print
:
1 2 3 4 |
|
Info
Cuando necesitamos ver muchas variables, imprimir una a una puede ser un engorro, en ese caso podemos usar info locals
para visualizar todas las variables del contexto en el que estamos:
1 2 3 |
|
Hay más opciones como info args
e info stack
. Puedes verlas todas con help info
.
Lo tenemos, estamos cometiendo un error al iterar sobre j
y se nos ha salido de rango.
Revisando la aplicación encontramos que el error está en la línea 45, al comparar el límite de j
con el valor de i
. Hacemos el siguiente cambio:
1 2 |
|
Salimos, volvemos a compilar y volvemos a probar, pero ya ejecutando siempre con gdb:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Comprobamos que ya no tenemos ningún error de segmentación pero, sin embargo, la aplicación no funciona como debería. ¿Cómo encontramos el error ahora? Necesitamos analizar el funcionamiento de la aplicación e ir viendo lo que hace conforme se ejecuta.
Lo veremos en la siguiente sección.