2010-10-11 20 views
25

Quiero saber cómo funciona internamente gdb. p. Sé una breve idea de que hace uso de la llamada al sistema ptrace() para supervisar el programa rastreado. Pero quiero saber cómo maneja las señales, cómo inserta el nuevo código y otras cosas tan fabulosas que hace.¿Cómo funciona gdb?

+6

Esto cubre algunos de los aspectos importantes del funcionamiento interno de GDB: www.gnuarm.com/pdf/gdbint.pdf – zengr

+3

@zengr: ¿Por qué no publicar esto como una respuesta? – DarkDust

Respuesta

6

La única forma en que lo descubrirá es estudiando el source.

También puede compilarlo y depurarlo consigo mismo. Examine el código y sabrá exactamente cómo hace lo que hace.

La fuente de lectura GDB no es para cardíacos, está repleta de macros y usa mucho libbfd, que a su vez es difícil de entender.

Tiene que hacerlo, porque es portátil (y en particular, construye y funciona en plataformas que no tienen ptrace() en absoluto).

+0

Creo que te refieres a [chock full] (http://en.wiktionary.org/wiki/chock_full) – sje397

+0

http://www.cs.utah.edu/dept/old/texinfo/gdb/gdbint.html#SEC1 – zengr

16

Eche un vistazo a GDB Internals Manual, que cubre algunos de los aspectos importantes. También hay un PDF version anterior de este documento.

Del manual:

En este documento se documenta la parte interna del depurador GNU, GDB. Incluye una descripción de los algoritmos y operaciones clave de gdb, así como los mecanismos que adaptan gdb a hosts y objetivos específicos.

+0

[Manual de GDB Internals] (https://sourceware.org/gdb/download/onlinedocs/gdbint/) no encontrado zengr .. – sree

+2

Gracias Sree! Fijo. – zengr

3

Tomado de gdbint.pdf:

Se puede hacer ya sea como puntos de interrupción de hardware o como software puntos de ruptura:

  • puntos de interrupción de hardware están a veces disponibles como funciones de depuración incorporados con algunos papas fritas. Normalmente, estos trabajos tienen registrado dedicado en el que se puede almacenar la dirección de punto de interrupción. Si la PC (abreviatura de contador de programa) coincide alguna vez con un valor en un punto de interrupción registros, la CPU genera una excepción y la informa a GDB.
  • Otra posibilidad es cuando un emulador está en uso; muchos emuladores incluyen circuitos que vigilan las líneas de direcciones que salen del procesador y lo obligan a detenerse si la dirección coincide con la dirección de un punto de interrupción.
  • Una tercera posibilidad es que el objetivo ya tiene la capacidad de hacer puntos de interrupción de alguna manera; por ejemplo, un monitor ROM puede hacer sus propios puntos de interrupción del software . Entonces, aunque estos no son literalmente puntos de referencia de hardware , desde el punto de vista de GDB funcionan de la misma manera;
  • Los puntos de interrupción del software requieren que GDB haga algo más de trabajo. La teoría básica es que GDB reemplazará una instrucción de programa con una trampa, una división ilegal , u otras instrucciones que causarán una excepción , y cuando se encuentre, GDB tomará la excepción y detendrá el programa. Cuando el usuario dice que continúe, GDB restaurará la instrucción original, de un solo paso, reinserte la trampa y continúe con .