gdb técnicas de depuración

gdb técnicas de depuración


1? Depuración con GDB

Depurador
cuando se ejecuta un error (bug) aparece, hay que depurar el programa, va a identificar y resolver errores (debug)
Referencia: "paso a paso" (VC métodos siguientes depurador)

Herramientas de depuración dividen en dos:
(1) 单步调试: utilizar el depurador, puntos de ruptura de unión se variables observadas y la memoria.
(2) 打印调试: El printf función de salida de información clave, como análisis

gdb depuración
de una sola etapa de depuración con línea de comandos gdb en Linux
Preparación: En compilar este paso, añada 选项‐g
g ++ -g main.cpp -o holamundo
o
% .o:% .cpp
[la Tab] G ++ -c -g-MMD $ < -o $ @

comando de control de la clase
en la interfaz de GDB utilización de comandos para manipular el proceso de depuración. gdb ./helloworld 进入gdb界面
b (rotura): Añadir un punto de interrupción
r (pista): Ejecutar el programa de re-iniciar
n (al lado): Siguiente
C (continuar): programa continúa funcionando hasta que el siguiente punto de interrupción, el programa o el final de la carrera
q (salir): Salir interfaz de programación
(Nota: el nombre completo se puede introducir descanso, sólo puede entrar en b)

Añadir un punto de interrupción:
b principal (más el nombre de la función)
b main.cpp: 12 (nombre + número de línea)
b 12 (el número de línea del archivo actual)
b :: la (nombre de función miembro de la clase +) Crear objeto
visualiza la información de punto de interrupción ruptura
supresión de interrupción de quiebre Del 2 (detrás Nº 2)

junto a la siguiente etapa
n a la siguiente etapa
n 3 realiza las siguientes tres pasos

Variable pantalla / memoria
p (impresión) el valor de indicación de la expresión
PA
p a+b
P (* Object) P1-> A
usos más particulares, como una pantalla de llamada a la función
p ( "% d", ' A')

display Variable / memoria
disp (display) variables de monitor (cada paso se lleva a cabo se muestran), equivalente a ver en VC

indicación del valor de memoria x
x/16xb buf
en donde
16: 16 unidades
x: pantalla hexadecimal (xdufs ...)
B: unidades de 1 byte (bhwg opcional)
bytes, Media-Word, Word, Gigante

Ver Ayuda
Ayuda del X-
info Cómo
se puede ver una ayuda de control secundario

Resumen:
1, el BGF depuración de preparación
2, la clase de comandos de control
3, comando de clase View

? 2? Los errores y de volcado de memoria

Segmento de error segmento de falla
En Linux, si el programa puntero operación incorrecta, el programa se bloquea, lo que sugiere "segmento de falla"

Por ejemplo, el acceso de puntero nulo, los accesos puntero silvestres, una matriz de acceso transfronterizo. . .
P = NULL * int;
. * P = 1;
puntero segura
error (errores, núcleo objeto de dumping)

fallo de segmentación localizar
uno, si este error es fácil de reproducir, usar GDB
GDB la HelloWorld
sección de avisos donde se produjo el error
de programa recibidos SIGSEGV, Fallo de segmentación.
0x0804844a en la prueba (el p = 0x0) EN main.cpp: 5
5 * p = 12; En este momento el programa ha terminado de forma anormal

información de pila bt (traza inversa) para ver el error de tiempo

volcado de memoria
En segundo lugar, este error no es fácilmente reproducible
programa se ejecuta durante todo el año, no se sabe cuándo se produce el error segmento, el programa se cierra inesperadamente.
Puede utilizar los medios "de volcado de memoria" para restaurar la posición de vista de error segmento ocurrido.

volcado de memoria

  1. En el shell de ejecución del programa (Terminal) en el comando Ejecutar
    ulimit -c unlimited
    (Nota: Después de reiniciar capa cerrada, para ser re-ejecutar una vez)

  2. Ejecutar el programa
    cuando se produce el error de bloque, el programa se cierra, al mismo tiempo en que cuando se produce un error el volcado (dump) a un núcleo. * Archivos.

  3. GDB para ver lo que está sucediendo con la posición de segmento de código de error
    GDB núcleo holamundo. ***

Resumen:
1, fallo de segmentación
2, un volcado de memoria

3? Gdb Suplemento depuración

Resumen
(1) ¿Qué tipo de programa está depurado?
(2) ¿Qué situaciones para depurar con GDB? Lo que no es el lugar?

Información de depuración en el programa
cuando con la opción -g cuando se compila el programa, el programa se puede depurar
, de hecho, cuando se compila con la opción -g, será el compilador “调试信息”añade al programa de destino y, por lo tanto, el volumen del programa de objetivo de manera significativa el cambio grande.
Comparación del volumen de la salida de programa de destino:
G ++ main.cpp -o HelloWorld -g
G ++ main.cpp -o HelloWorld

Por lo tanto, la forma de determinar si un programa con una "información de depuración" media?
El primer método: (visión directa)
objdump -h el HelloWorld
(Nota: gcc g ++ GDB objdump nm ar ld ... es un conjunto de herramientas)
segmento comenzará con un montón de .debug
segundo método: holamundo GDB
Si la voluntad información de depuración Consejo:
la lectura de los símbolos de la HelloWorld ... ( no debugging symbols found) ... HECHO.

Información de depuración registra qué cosas?
- al menos grabar el archivo de origen y la información de número de línea

GDB de uso de escenarios
posibles aplicaciones:
- Unidad de Pruebas (código corto cuenta con función simple)
- el error de posicionamiento de la sección
no es aplicable ocasiones:
- grandes programas,
- sobre todo los procedimientos utilizados en los multi-hilo
- paso a paso cuando el problema no puede ser reproducido solamente cuando la operación normal de la reproducción
(我们使用打印调试)

Resumen:
1, el BGF depuración principio
2, depuración gdb e imprimir aplicaciones

Recursos para el aprendizaje 《C语言/C++学习指南》Linux开发篇

Publicado seis artículos originales · ganado elogios 0 · Vistas 67

Supongo que te gusta

Origin blog.csdn.net/qq_46165724/article/details/104761162
Recomendado
Clasificación