2010-10-11 5 views
25

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?

+6

Bezieht sich auf einige der wichtigsten Aspekte von GDB Interna: www.gnuarm.com/pdf/gdbint.pdf – zengr

+3

@zengr: Warum haben Sie nicht schreiben, dass als Antwort? – DarkDust

Antwort

6

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).

+0

Ich denke du meinst [vollgestopft] (http://en.wiktionary.org/wiki/chock_full) – sje397

+0

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

16

Ü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.

+0

[GDB Internal Manual] (https://sourceware.org/gdb/download/onlinedocs/gdbint/) nicht gefunden zengr .. – sree

+2

Danke Sree! Fest. – zengr

3

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.