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?
Respuesta
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).
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.
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 .
- 1. gdb layout asm no funciona en mac?
- 2. ¿Por qué gdb casting no funciona?
- 3. cómo agregar gdb a cygwin
- 4. ¿Cómo se usa gdb?
- 5. ¿Cómo depurar usando gdb?
- 6. NSLog no hay salida en LLDB. Funciona en GDB
- 7. ¿Cómo usar gdb como monitor?
- 8. Cómo imprimir wstring en gdb
- 9. Cómo usar gdb con LD_PRELOAD
- 10. ¿Cómo ejecutar gdb con LD_PRELOAD?
- 11. Cómo importar 'GDB' en Python
- 12. ¿Cómo puedo usar "ver" GDB?
- 13. ¿Cómo evaluar las funciones en GDB?
- 14. ¿Cómo funciona la depuración inversa?
- 15. ¿Cómo funciona un depurador como gdb para establecer un punto de interrupción a través de JTAG?
- 16. ¿Por qué colgaría gdb?
- 17. gdb: multihilo
- 18. gdb: programa de salida sin salir de gdb
- 19. Depurar qemu con gdb
- 20. gdb en backtrack
- 21. gdb - depuración con tubería
- 22. gdb desmontar una línea
- 23. usando getopt con gdb
- 24. gdb - ¿Cómo ejecutar automáticamente el ejecutable?
- 25. ¿Cómo puedo obligar a GDB a desmontar?
- 26. ¿Cómo detengo la continuación en GDB
- 27. ¿Cómo imprimir valores de registro en GDB?
- 28. ¿Cómo imprimir en modo binario en gdb?
- 29. Solaris GDB: ¿Cómo pausar la ejecución?
- 30. ¿Cómo ejecutar el ensamblado en gdb directamente?
Esto cubre algunos de los aspectos importantes del funcionamiento interno de GDB: www.gnuarm.com/pdf/gdbint.pdf – zengr
@zengr: ¿Por qué no publicar esto como una respuesta? – DarkDust