Red de conocimiento informático - Aprendizaje de programación - ¿Cómo verifica gdb de qué línea de código salió el programa al ejecutarse?

¿Cómo verifica gdb de qué línea de código salió el programa al ejecutarse?

gdb view core file

Básicamente,

el archivo principal es un archivo que contiene toda la información sobre el proceso cuando el programa falla. En la "edad de oro", los programadores tenían que mostrar los archivos principales en hexadecimal

y luego leer manuales de código de máquina, pero ahora todo es mucho más simple. Por cierto, en FreeBSD y otros sistemas 4.4BSD, el nombre del archivo del kernel es

progname.core, no simplemente core, para que el archivo del kernel

pueda ser claramente conocido. a qué programa pertenece.

1. Para verificar el archivo principal, primero depure el programa ejecutable que generó el archivo principal y use el nombre del programa ejecutable gdb

:

2. core analiza el nombre del programa ejecutable.core

archivo

Nota: si no está en el directorio donde se encuentra el archivo principal, primero debe ejecutar dir

/Ruta al nombre del programa ejecutable.core/.

(gdb)nombre del programa ejecutable principal.core

Ejemplo:

$gdb a.out

GDB es software gratuito. son bienvenidos

a distribuir copias del mismo bajo ciertas condiciones; escriba "mostrar copia"

para ver las condiciones. GDB no ofrece garantía; escriba "mostrar

garantía" para obtener más detalles. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free

Software Foundation, Inc.

(gdb)core

a.out.core p>

El núcleo es generado por "a.out".

Programa finalizado con

señal 11, error de segmentación.

No se puede acceder a la memoria en la dirección

0x7020796d.

#0 0x164a en bazz (anint=0x5) en temp.c:17

(gdb)

En este ejemplo, el programa en ejecución se llama a.out, por lo que el núcleo El nombre del archivo es

a.out.core. Sabemos que el programa falló porque la función bazz intentó acceder a un bloque de memoria al que no pertenecía.

A veces es útil saber cómo se llama una función. Porque en programas complejos, los problemas pueden ocurrir más arriba en la pila de llamadas a funciones.

3.

El comando bt hará que gdb

genere el rastreo de la pila de llamadas de función

(gdb)bt <. /p>

#0 0x164a en bazz (anint=0x5) en temp.c:17

#1 0xefbfd888 en end ()

#2 0x162c en main () en temp.c :11

#3.c:11

(gdb)

La función end() se llamará cuando el programa falle <; /p>

En este ejemplo, la

función buzz()

se llama desde main().