2009-04-26 14 views
6

Soy un principiante en GDB y lo conseguí funcionando correctamente. Sin embargo, me pregunto cómo se usa esto en los grandes proyectos. Tengo un proyecto donde la construcción se hace usando makefile y g ++. Para que GDB funcione, necesitamos compilar con símbolos de depuración en, a la derecha (archivos g ++ -g)?Depuración usando gdb - Mejores prácticas

Pregunta

  1. ¿Es necesario crear un nuevo objetivo en el Makefile algo así como "depuración", de modo que pueda hacer una versión de depuración como marca de depuración. ¿Es esta la mejor práctica?
  2. Supongamos que necesito depurar solo foo.cpp y ¿es posible generar símbolos de depuración solo para eso aparte de construir un programa completo incluyendo main?

¿Alguna idea?

Respuesta

2
  1. No es necesario, aunque es posible que desee considerar siempre la construcción con -g (a veces, incluso puede que tenga que probar y depurar optimizado (-O1, O2, etc código), ¿por qué no dejar - g en? Para los comunicados, siempre puede ejecutar tira en el binario.

  2. Sí. Construir sólo ese fichero con -g.

+0

¿Qué quiere decir con "Para los comunicados, siempre puede ejecutar tira en el binario"? ¿Puedes explicar? –

+0

http://www.sourceware.org/binutils/docs-2.16/binutils/strip.html Con -g, su código será algo mayor que sin ella. No hay manera de añadir fácilmente los símbolos de depuración, pero se puede quitar fácilmente con la tira. – Mikeage

0

gdb funcionará sin los símbolos; es solo que la salida es mucho menos útil en ese momento.

  1. Es una cuestión de preferencia. Construyo todo de forma predeterminada en modo de depuración, y hago en la versión cuando sea necesario.
  2. Sí.
1

no creo que hay una gran diferencia entre el uso de gdb en proyectos grandes, medianos o pequeños. Sin embargo, para proyectos grandes Debe tener en cuenta la cantidad de espacio requerido para la compilación, ya que la información de depuración aumenta el tamaño del objeto y los archivos ejecutables.

  1. Si inicialmente subestima la necesidad de depuración de toda la solución, es probable que sufra su decisión en el futuro. Siempre es bueno cuando la compilación se puede hacer con o sin información de depuración, así que escriba sus scripts de compilación con cuidado.
  2. Sí, pero considere mi respuesta anterior. A veces, el problema podría provenir de un módulo para el que no tienes información de depuración.
2

En grandes proyectos aquí donde trabajo siempre construimos con información de depuración más detallado posible (como, '-ggdb3' para el formato nativo o GDB '-gdwarf-2 -g3' para el acceso a las macros en GDB).

Cuando terminemos con la depuración, solo usaremos el comando 'strip' para quitar toda la información de depuración de los binarios.

gcc -ggdb3 blah.c -o blah 
strip blah 
0

Siempre se puede tener de la versión de depuración guardado en alguna parte, y si alguna vez necesita volver a enlazar el símbolo de información, después de la depuración de la versión/versión simplificada, que sólo puede ir "archivo/ruta" y GDB volverá a leer los símbolos para ese objetivo. También puede usar "symbol-file/path" para configurar la información del símbolo para que se vincule a un archivo eliminado.