2009-06-08 11 views
15

Decidí averiguar cómo nuestros practicantes de C/C + * nix usan el depurador de gdb.¿Cómo se usa gdb?

Esto es lo que normalmente utilizo:

  1. b - filename.c ruptura: la línea #, la función, filename.cpp: función, className :: Miembro
  2. n, c, s - junto Continuar con el paso
  3. gdb nombre del programa => establecer puntos de interrupción ==> ejecutar [lista de parámetros] (hago esto para establecer los puntos de ruptura antes de que comience el programa)
  4. l - para listar el código fuente circundante.
  5. adjuntar idProceso 6 ruptura [lugar]
  6. GDB programName corefile.core (para examinar por qué aplicación se estrelló)
  7. también puse a veces punto de ruptura en función de salida (salida rotura) para examinar el programa pilas
  8. información b examinar todos los puntos de interrupción
  9. clara [lista de puntos de interrupción]

¿Cómo se utiliza?

+0

Fue útil. ¿Por qué no convertirlo en una wiki comunitaria al menos? –

+0

Estoy de acuerdo ... volvamos a abrirlo. –

Respuesta

5

comandos más útiles GDB en mi opinión (aparte de todo ya enumeradas):

  • información roscas - información sobre las discusiones
  • hilo N - interruptor para enhebrar N
  • catch throw - rompe en cualquier excepción lanzada. Útil cuando atrapaste el error solo después de que la pila se desenrolla.
  • printf, de impresión - examinar cualquier y todas las expresiones, printf acepta especificadores de formato de estilo C

Por último, si la depuración en un vínculo lento, la interfaz de usuario de texto podría ser de utilidad. Para usarlo, inicie gdb con el modificador de línea de comandos --tui.

4

GDB no es mi especialidad, pero aquí es lo que yo uso:

  • bt lista de una pila
  • up, down se mueve en una pila
  • until se están hasta una línea con mayor número que los actuales se alcanza - para salir de los bucles
  • watch [expr] interrumpir el programa cuando expr cambia

... pero sobre todo yo uso DDD como una interfaz para GDB

+0

utilizo ddd demasiado:) ... algún consejo para ddd son bienvenidos y alentados ... gracias –

1

También hay un par de usos que no están directamente relacionados con la depuración. Por ejemplo, se puede utilizar para la evaluación de la expresión de C:

 
(gdb) printf "%lu\n", (unsigned long)(-3L) 
4294967293 
10

Scripting es una buena característica GDB.

  1. Primero establezca un punto de interrupción, como: b someFunction \ n.
  2. Luego ejecuta el comando: comandos \ n. GDB pedirá comandos para ese punto de interrupción.
  3. El escenario común es imprimir algún valor y luego continuar, por lo que deberá ingresar: p someVar \ n continuar \ n.
  4. Para finalizar la prensa de la escritura: Ctrl-D

Después de programa que se ejecuta usted podrá ver su script ejecutado en ocasiones cuando se produce el punto de interrupción.

+2

para obtener mejores GDB con un mejor soporte de scripting, véase PythonGdb - scritable GDB en Python – ASk

12

Además de las cosas que ya se han contabilizado también uso:

  • un archivo .gdbinit para contenedores STL
  • signal SIGNAL noprint nostop para algunas señales personalizadas que no son de interés real cuando la depuración
  • C-yesos para desviar punteros
  • puntos de captura (catch catch, catch catch)
  • condición de Break-condicional y puntos de observación
  • raramente gdbserver para la depuración remota
  • gdb programa coredump, para aquellos segfaults embarazosas;)

PS: Una de las razones que personalmente amo GDB por cierto. es que admite la finalización de pestañas para casi todo (comandos gdb, símbolos en la tabla de símbolos, funciones, funciones de miembros, etc.). Este es un aumento de la productividad bastante bueno en mi opinión.

3

Escriba Ctrl-X Ctrl-A para abrir una ventana simple con vista previa de origen.

0

utilizo el interruptor gdb -tui para una gran 'interfaz de usuario de texto' (un tipo de interfaz gráfica de usuario en modo texto). Es compatible con múltiples ventanas y en general es mucho más agradable que con el comando 'lista' (ya que muestra la fuente en una ventana sep)

+0

, es decir, utilizar el modo tui cuando im no usar gDB desde Emacs (que es lo que suele hacer :) – horseyguy

2

Hace algún tiempo me encontré cgdb:

http://cgdb.sourceforge.net/

Este es una interfaz basada en curses (consola de color) para gdb que me hizo la vida mucho más feliz cuando me limitaron a la depuración en una ventana de la consola.

0

Los principiantes que usan gdb lo sentirán como algo difícil. Pero hay una herramienta basada en GUI DDD (Data Display Debugger) que es lo mismo que gdb. Usted tiene una consola en la parte inferior para ejecutar los comandos de gdb y la parte superior de la 3/4 sería el código.T ll tiene la opción de aprender y entender los comandos y el flujo excatly