Ich möchte wissen, wie gdb intern arbeitet. z.B. Ich kenne eine kurze Idee, dass es den Systemaufruf ptrace() verwendet, um verfolgte Programme zu überwachen. Aber ich möchte wissen, wie es Signale verarbeitet, wie es neuen Code einfügt, und andere solche fabelhaften Dinge, die es tut.Wie funktioniert gdb?
Antwort
Die einzige Möglichkeit, die Sie herausfinden werden, ist durch das Studium der source.
Sie können es auch erstellen und es mit sich selbst debuggen. Schritt durch den Code, und Sie werden wissen, genau wie es tut, was es tut.
Lesen GDB-Quelle ist nicht für schwache Nerven obwohl - es ist voll von Makros und verwendet libbfd
, die selbst schwer zu verstehen ist.
Es muss, weil es portabel ist (und insbesondere baut und auf Plattformen arbeitet, die ptrace()
überhaupt nicht haben).
Überprüfen Sie die GDB Internals Manual, die einige der wichtigen Aspekte behandelt. Es gibt auch eine ältere PDF version dieses Dokuments.
Aus dem Handbuch:
Dieses Dokument dokumentiert die Interna der GNU Debugger GDB. Es enthält eine Beschreibung der Schlüsselalgorithmen und -operationen von gdb sowie die Mechanismen, die gdb an bestimmte Hosts und Ziele anpassen.
von gdbint.pdf Genommen:
Es kann entweder als Hardware oder als Software-Breakpoints Stützpunkte erfolgen:
- Hardware Breakpoints sind manchmal verfügbar als builtin Debugging-Funktionen mit einigen Chips. Typischerweise arbeiten diese, indem sie dedizierte Register haben, in denen die Haltepunktadresse gespeichert werden kann. Wenn der PC (Kürzel für Programmzähler) jemals mit einem Wert in einem Haltepunkt Register übereinstimmt, löst die CPU eine Ausnahme aus und meldet sie an GDB.
- Eine andere Möglichkeit ist, wenn ein Emulator verwendet wird; Viele Emulatoren enthalten eine Schaltung, die die vom Prozessor ausgegebenen Adressleitungen überwacht und zum Anhalten zwingt, wenn die Adresse mit der Adresse eines Haltepunkts übereinstimmt.
- Eine dritte Möglichkeit ist, dass das Ziel bereits in der Lage ist, Breakpoints zu erzeugen; zum Beispiel kann ein ROM-Monitor seine eigenen Software-Breakpoints machen. Also, obwohl diese nicht buchstäblich Hardware Breakpoints sind, funktionieren sie aus Sicht von GDB gleich;
- Software Breakpoints erfordern von GDB etwas mehr Arbeit. Die grundlegende Theorie ist, dass GDB einen Programmbefehl durch einen Trap, illegal divide oder einen anderen Befehl ersetzen wird, der eine Ausnahme verursacht, und GDB wird dann die Ausnahme nehmen und das Programm stoppen. Wenn der Benutzer zum Fortfahren sagt, wird GDB die ursprüngliche Anweisung wiederherstellen, Einzelschritt, die Falle erneut einfügen und weitermachen.
- 1. gdb Schritt funktioniert nicht wie erwartet
- 2. Wie funktioniert ndk-gdb unter Android?
- 3. Wie Debuggen mit Gdb?
- 4. Wie verwenden Sie gdb?
- 5. Wie klar gdb Befehlsbildschirm?
- 6. Wie wstring in gdb drucken
- 7. Wie Einstellungen in Gdb speichern?
- 8. Wie grep auf gdb Drucken
- 9. in gdb
- 10. GDB Spickzettel
- 11. gdb: Multithreading
- 12. Wie benutzt man GDB Debug OpenCV Programme?
- 13. wie man gdb zu cygwin hinzufügt
- 14. Eingabeumleitung in Gdb (MinGW)
- 15. Wie rekonstruiert Gdb Stacktrace für C++?
- 16. Wie bewertet man Funktionen in GDB?
- 17. Wie funktionieren GDB rwatch und awatch Befehle?
- 18. Wie halte ich das Fortfahren in GDB
- 19. wie fügen wir mehr Symboldatei in gdb
- 20. Warum der Breakpoint vor dem Ausführen in GDB nicht funktioniert?
- 21. Wie gdb Python Debugging-Erweiterung in virtualenv
- 22. gdb: interne Fehlereinstellung Haltepunkte
- 23. Wie funktioniert ein Debugger wie GDB, um einen Haltepunkt über JTAG festzulegen?
- 24. GDB-Fehler "cp_search_static_and_baseclasses"
- 25. Debugging mit gdb - Best Practices
- 26. Eclipse GDB Hardware Debugging Plugin
- 27. Debug qemu mit gdb
- 28. Debugging-Vorlagen mit GDB
- 29. gdb startet pid
- 30. gdb - debugging mit Rohr
Bezieht sich auf einige der wichtigsten Aspekte von GDB Interna: www.gnuarm.com/pdf/gdbint.pdf – zengr
@zengr: Warum haben Sie nicht schreiben, dass als Antwort? – DarkDust