Einige generische Hilfe: gdb Start GDB, ohne Debugging les gdb Programm starten Debugging Programm gdb Programm Core Debug Coredump Kern produziert von Programm gdb --help beschreiben Befehlszeilenoptionen 1- Zuerst finden Sie das Verzeichnis, wo die Corefile generiert wird. 2 Verwenden Sie dann den Befehl ls - ltr im Verzeichnis, um die zuletzt erstellte Corefile zu finden. 3- Zum Laden der Corefile verwenden Sie den GDB-Binärpfad der Corefile. Dadurch wird die Corefile geladen. 4 Dann können Sie die Informationen mit dem Befehl bt abrufen. Für detaillierte backtrace verwenden Sie bt voll. 5- Um die Variablen auszudrucken, verwenden Sie den Druckvariablennamen oder den P-Namen-Namen. 6- Um eine Hilfe auf der gdb zu erhalten, verwenden Sie die Hilfeoption oder verwenden Sie das Suchthema 7. Verwenden Sie die Rahmenrahmennummer, um zur gewünschten Bildnummer zu gelangen. 8- Verwenden Sie n und n n Befehle, um Rahmen n Frames auszuwählen und wählen Sie Frame n Frames nach unten. 9- Zum Stoppen von gdb use quit oder q .8. Daten untersuchen Der übliche Weg, um Daten in Ihrem Programm zu untersuchen, ist mit dem Druckbefehl (abgekürzt p) oder dessen Synonym zu prüfen. Es wertet und druckt den Wert eines Ausdrucks der Sprache, in der Ihr Programm geschrieben wird (siehe Abschnitt GDB mit verschiedenen Sprachen verwenden). Print expr print f expr expr ist ein Ausdruck (in der Ausgangssprache). Standardmäßig wird der Wert von expr in einem Format gedruckt, das seinem Datentyp entspricht, den Sie ein anderes Format auswählen können, indem Sie f angeben. Wobei f ein Buchstabe ist, der das Format angibt, siehe Ausgabeformate. Print print f Wenn Sie expr. GDB zeigt den letzten Wert wieder an (aus der Werthistorie siehe Abschnitt Wertverlauf). Damit können Sie den gleichen Wert in einem alternativen Format bequem einsehen. Eine niedrigere Ebene der Prüfung der Daten ist mit dem Befehl x. Es untersucht Daten im Speicher an einer bestimmten Adresse und druckt sie in einem bestimmten Format. Siehe Abschnitt Gedächtnis untersuchen Wenn Sie sich für Informationen über Typen interessieren oder darüber, wie die Felder einer Struktur oder einer Klasse deklariert sind, verwenden Sie den Befehl ptype exp, anstatt zu drucken. Siehe Abschnitt Untersuchen der Symboltabelle. 8.1 Ausdrücke drucken und viele andere GDB-Befehle akzeptieren einen Ausdruck und berechnen seinen Wert. Jede Art von Konstante, Variable oder Bediener, die durch die Programmiersprache definiert ist, die Sie verwenden, ist in einem Ausdruck in GDB gültig. Dazu gehören bedingte Ausdrücke, Funktionsaufrufe, Casts und String-Konstanten. Es enthält leider keine Symbole, die durch Präprozessor definiert werden. GDB unterstützt Array-Konstanten in Ausdrücken, die vom Benutzer eingegeben werden. Die Syntax ist. . Zum Beispiel können Sie den Befehl print verwenden, um ein Array im Speicher aufzubauen, das im Zielprogramm malloc ed ist. Da C so weit verbreitet ist, sind die meisten Ausdrücke, die in den Beispielen in diesem Handbuch gezeigt werden, in C. Siehe Abschnitt Verwenden von GDB mit verschiedenen Sprachen. Informationen über die Verwendung von Ausdrücken in anderen Sprachen. In diesem Abschnitt besprechen wir Operatoren, die Sie in GDB-Ausdrücken verwenden können, unabhängig von Ihrer Programmiersprache. Casts werden in allen Sprachen unterstützt, nicht nur in C, weil es so nützlich ist, eine Zahl in einen Zeiger zu werfen, um eine Struktur an dieser Adresse im Speicher zu untersuchen. GDB unterstützt diese Operatoren, zusätzlich zu den üblichen Programmiersprachen: ist ein binärer Operator für die Behandlung von Teilen des Speichers als Arrays. Siehe Abschnitt Künstliche Arrays. für mehr Informationen. :: ermöglicht es Ihnen, eine Variable in Bezug auf die Datei oder Funktion, wo es definiert ist, anzugeben. Siehe Abschnitt Programmvariablen. Addr Bezieht sich auf ein Objekt vom Typ Typ, das bei der Adresse addr im Speicher gespeichert ist. Addr kann ein beliebiger Ausdruck sein, dessen Wert eine Ganzzahl oder ein Zeiger ist (aber Klammern sind um Binäroperatoren erforderlich, genau wie in einer Besetzung). Dieses Konstrukt ist erlaubt, unabhängig davon, welche Art von Daten normalerweise in addr liegen soll. 8.2 Programmvariablen Die häufigste Art des Ausdrucks ist der Name einer Variablen in deinem Programm. Variablen in Ausdrücken werden im ausgewählten Stapelrahmen verstanden (siehe Abschnitt Auswählen eines Rahmens) müssen sie entweder: global (oder datei-statisch) sichtbar nach den Regeln der Programmiersprache ab dem Zeitpunkt der Ausführung in diesem Rahmen Dies bedeutet, dass In der Funktion kannst du die Variable a betrachten und verwenden, wann immer dein Programm innerhalb der Funktion foo ausgeführt wird. Aber du kannst die Variable b nur verwenden oder untersuchen, während dein Programm in dem Block ausgeführt wird, in dem b deklariert ist. Es gibt eine Ausnahme: Sie können sich auf eine Variable oder eine Funktion beziehen, deren Umfang eine einzelne Quelldatei ist, auch wenn der aktuelle Ausführungspunkt nicht in dieser Datei ist. Aber es ist möglich, mehr als eine solche Variable oder Funktion mit dem gleichen Namen (in verschiedenen Quelldateien) zu haben. Wenn das passiert, hat die Bezugnahme auf diesen Namen unvorhersehbare Effekte. Wenn Sie möchten, können Sie eine statische Variable in einer bestimmten Funktion oder Datei angeben, indem Sie die Colon-Colon-Notation verwenden: Hier ist Datei oder Funktion der Name des Kontextes für die statische Variable. Im Fall von Dateinamen können Sie Anführungszeichen verwenden, um sicherzustellen, dass GDB den Dateinamen als Einzelwort analysiert - zum Beispiel, um einen globalen Wert von x zu drucken, der in f2.c definiert ist. Diese Verwendung von :: ist sehr selten im Konflikt mit der sehr ähnlichen Verwendung der gleichen Notation in C. GDB unterstützt auch die Verwendung des C-Geltungsbereichs in GDB-Ausdrücken. Warnung: Gelegentlich kann eine lokale Variable an bestimmten Punkten in einer Funktion den falschen Wert haben - kurz nach dem Einstieg in einen neuen Bereich und kurz vor dem Beenden. Sie können dieses Problem sehen, wenn Sie durch Maschinenanweisungen treten. Dies liegt daran, dass bei den meisten Maschinen mehr als eine Anweisung zum Einrichten eines Stapelrahmens (einschließlich lokaler Variablendefinitionen) erforderlich ist, wenn Sie durch Maschinenbefehle schreiten, können Variablen die falschen Werte aufweisen, bis der Stapelrahmen vollständig gebaut ist. Beim Ausstieg dauert es in der Regel auch mehr als eine Maschinenanweisung, um einen Stapelrahmen zu zerstören, nachdem du damit begonnen hast, durch diese Gruppe von Anweisungen zu gehen, lokale Variablendefinitionen können weg sein. Dies kann auch passieren, wenn der Compiler erhebliche Optimierungen macht. Um sicher zu sein, dass Sie immer genaue Werte sehen, schalten Sie alle Optimierungen beim Kompilieren aus. Ein weiterer möglicher Effekt von Compiler-Optimierungen besteht darin, unbenutzte Variablen aus der Existenz zu optimieren oder Variablen zu Registern zuzuordnen (im Gegensatz zu Speicheradressen). Abhängig von der Unterstützung für solche Fälle, die durch das vom Compiler verwendete Debug-Info-Format angeboten werden, ist GDB möglicherweise nicht in der Lage, Werte für solche lokalen Variablen anzuzeigen. Wenn das passiert, wird GDB eine Nachricht wie folgt ausdrucken: Um solche Probleme zu lösen, entweder ohne Optimierungen neu zu kompilieren oder ein anderes Debug-Info-Format zu verwenden, wenn der Compiler mehrere solcher Formate unterstützt. Zum Beispiel, GCC, der GNU CC-Compiler unterstützt in der Regel die Option - gstabs. - gstabs erzeugt Debug-Informationen in einem Format, das Formaten wie COFF überlegen ist. Sie können DWARF2 (-gdwarf-2) verwenden, was auch eine effektive Form für Debug-Info ist. Siehe Abschnitt Optionen für das Debuggen Ihres Programms oder GNU CC unter Verwendung von GNU CC. für mehr Informationen. Der linke Operand des Musses muss sich im Speicher befinden. Array-Werte, die auf diese Weise gemacht werden, verhalten sich wie andere Arrays in Bezug auf das Subskription und werden zu Zeigern gezwungen, wenn sie in Ausdrücken verwendet werden. Künstliche Arrays erscheinen am häufigsten in Ausdrücken über die Werthistorie (siehe Abschnitt Werthistorie), nach dem Ausdrucken eines aus. Ein weiterer Weg, um eine künstliche Array zu schaffen ist, eine Besetzung zu verwenden. Dies interpretiert einen Wert, als ob es ein Array wäre. Der Wert muss nicht im Speicher sein: Als Bequemlichkeit, wenn du die Array-Länge verlässt (wie in (type) value) GDB berechnet die Größe, um den Wert zu füllen (als sizeof (value) sizeof (type) Manchmal ist das künstliche Array Mechanismus ist bei mäßig komplexen Datenstrukturen nicht ganz ausreichend, die interessierenden Elemente sind vielleicht nicht angrenzend - zum Beispiel, wenn man sich für die Werte von Zeigern in einem Array interessiert. Eine nützliche Arbeit in dieser Situation ist die Verwendung eines Bequemlichkeitsvariable (siehe Abschnitt Convenience-Variablen) als Zähler in einem Ausdruck, der den ersten interessanten Wert druckt und diesen Ausdruck dann über RET wiederholt. Angenommen, du hast ein Array dtab von Zeigern zu Strukturen, und du interessierst dich für die Werte Von einem Feld fv in jeder Struktur Hier ist ein Beispiel für das, was Sie eingeben könnten: 8.4 Ausgabeformate Standardmäßig druckt GDB einen Wert nach seinem Datentyp, manchmal ist dies nicht das, was Sie wollen, zum Beispiel möchten Sie vielleicht drucken Eine Zahl in Hexe oder ein Zeiger in Dezimalzahl. Oder möchten Sie vielleicht Daten im Speicher an einer bestimmten Adresse als Zeichenfolge oder als Anweisung anzeigen. Um dies zu tun, geben Sie ein Ausgabeformat an, wenn Sie einen Wert drucken. Die einfachste Verwendung von Ausgabeformaten ist, wie man einen bereits berechneten Wert ausdruckt. Dies geschieht durch das Starten der Argumente des Druckbefehls mit einem Schrägstrich und einem Formatbuchstaben. Die unterstützten Formatbuchstaben sind: x Betrachten Sie die Bits des Wertes als Ganzzahl und drucken Sie die Ganzzahl in Hexadezimal. D Als Ganzzahl in signierter Dezimalzahl drucken. U Als Integer in unsigned dezimal drucken O Als Integer im Oktal drucken T Als Integer in binär drucken. Der Buchstabe t steht für zwei. (2) a Druck als Adresse, sowohl absolut in hexadezimal als auch als Versatz aus dem nächstgelegenen Symbol. Sie können dieses Format verwenden, um zu entdecken, wo (in welcher Funktion) eine unbekannte Adresse gefunden wird: Das Befehls-Info-Symbol 0x54320 ergibt ähnliche Ergebnisse. Siehe Abschnitt Infosymbol. C Betrachte als Ganzzahl und drucke sie als Zeichenkonstante. F Betrachten Sie die Bits des Wertes als Gleitkommazahl und drucken Sie mit der typischen Gleitkommasyntax. Zum Beispiel, um den Programmzähler in Hex zu drucken (siehe Abschnitt 8.10 Register), geben Sie an, dass kein Leerzeichen benötigt wird, bevor der Schrägstrich dies ist, weil Befehlsnamen im GDB keinen Schrägstrich enthalten können. Um den letzten Wert in der Werthistorie mit einem anderen Format neu zu drucken, kannst du den Druckbefehl nur mit einem Format und ohne Ausdruck verwenden. Zum Beispiel druckt px den letzten Wert in Hex. 8.5 Gedächtnis prüfen Sie können den Befehl x (zur Prüfung) verwenden, um den Speicher in einem beliebigen Format zu prüfen, unabhängig von Ihren Programmdatentypen. X nfu addr x addr x Verwenden Sie den Befehl x, um den Speicher zu untersuchen. N. F. Und du bist alle optionalen Parameter, die angeben, wie viel Speicher zu zeigen und wie es zu formatieren addr ist ein Ausdruck geben die Adresse, wo Sie starten wollen, Speicher anzuzeigen. Wenn Sie standardmäßig für nfu verwenden. Sie müssen den Schrägstrich nicht eingeben. Mehrere Befehle setzen bequeme Vorgaben für addr. N. Die Wiederholungszählung Die Wiederholungszählung ist eine Dezimalzahl, die in der Voreinstellung 1 steht. Sie gibt an, wie viel Speicher (Zählen von Einheiten u) angezeigt werden soll. F. Das Anzeigeformat Das Anzeigeformat ist eines der Formate, die vom Druck verwendet werden. S (nullterminierte Zeichenfolge) oder i (Maschinenanweisung). Die Voreinstellung ist zunächst x (hexadezimal). Die Voreinstellung ändert sich jedes Mal, wenn Sie entweder x oder drucken. Du bist Die Einheitsgröße Die Einheitsgröße ist eine von b Bytes. H Halfwords (zwei Bytes). W Wörter (vier Bytes). Dies ist die ursprüngliche Voreinstellung. G riesige Worte (acht Bytes). Jedes Mal, wenn Sie eine Einheitsgröße mit x angeben. Diese Größe wird die Standardeinheit, wenn Sie das nächste Mal x verwenden. (Für die s - und i-Formate wird die Einheitsgröße ignoriert und ist normalerweise nicht geschrieben.) Addr. Startanzeigeadresse addr ist die Adresse, wo GDB beginnen soll, Speicher anzuzeigen. Der Ausdruck braucht keinen Zeigerwert zu haben (obwohl er kann), wird er immer als eine ganzzahlige Adresse eines Bytes des Gedächtnisses interpretiert. Siehe Abschnitt Ausdrücke. Für weitere Informationen über Ausdrücke. Die Voreinstellung für addr ist in der Regel erst nach der letzten eingehenden Adresse - aber einige andere Befehle setzen auch die Standardadresse: Info-Haltepunkte (zur Adresse des letzten Haltepunkts), Infozeile (zur Startadresse einer Zeile) und Drucken (wenn Sie es verwenden, um einen Wert aus dem Speicher anzuzeigen). Zum Beispiel ist x3uh 0x54320 eine Anforderung, drei Halbwörter (h) des Speichers anzuzeigen, die als unsigned decimal integers (u) formatiert sind, beginnend bei Adresse 0x54320. X4xw sp druckt die vier Wörter (w) des Speichers über dem Stack-Pointer (hier, siehe Abschnitt Registers) in hexadezimal (x). Da die Buchstaben, die Einheitengrößen angeben, sich alle von den Buchstaben unterscheiden, die Ausgabeformate angeben, müssen Sie sich nicht erinnern, ob die Einheitsgröße oder das Format zuerst anfängt. Die Ausgangsspezifikationen 4xw und 4wx bedeuten genau dasselbe. (Allerdings muss der Zählwert n zuerst kommen, wenn man nicht funktioniert.) Obwohl die Einheitsgröße u für die Formate s und i ignoriert wird. Du möchtest vielleicht noch einen Zählwert n verwenden, 3i gibt an, dass du drei Maschinenbefehle, einschließlich aller Operanden, sehen möchtest. Der Befehl zerlegt eine alternative Möglichkeit, Maschineninstruktionen zu überprüfen, siehe Quell - und Maschinencode. Alle Vorgaben für die Argumente zu x sind so konzipiert, dass es einfach ist, den Scan-Speicher mit minimalen Spezifikationen fortzusetzen, jedes Mal wenn Sie x verwenden. Zum Beispiel, nachdem Sie drei Maschinenanweisungen mit x3i addr geprüft haben. Du kannst die nächsten sieben mit nur x7 inspizieren. Wenn Sie RET verwenden, um den Befehl x zu wiederholen, wird die Wiederholungszählung n wieder verwendet, wobei die anderen Argumente für die sukzessiven Verwendung von x standardmäßig verwendet werden. Die Adressen und Inhalte, die durch den Befehl x gedruckt werden, werden nicht in der Werthistorie gespeichert, da es oft zu viel von ihnen gibt und sie in den Weg kommen würden. Stattdessen stellt die GDB diese Werte für die spätere Verwendung in Ausdrücken als Werte der Bequemlichkeitsvariablen zur Verfügung. Nach einem x-Befehl steht die letzte geprüfte Adresse zur Verwendung in Ausdrücken in der Bequemlichkeitsvariable zur Verfügung. Der Inhalt dieser Adresse, wie geprüft, ist in der Bequemlichkeitsvariable verfügbar. Wenn der x-Befehl eine Wiederholungszählung hat, werden die gespeicherten Adressen und Inhalte aus der letzten Speichereinheit gedruckt, die nicht mit der letzten Adresse übereinstimmt, die gedruckt wurde, wenn mehrere Einheiten auf der letzten Ausgabezeile gedruckt wurden. 8.6 Automatische Anzeige Wenn Sie feststellen, dass Sie den Wert eines Ausdrucks häufig drucken möchten (um zu sehen, wie er sich ändert), möchten Sie ihn ggf. der automatischen Anzeigeliste hinzufügen, damit GDB bei jedem Programmstart seinen Wert ausdruckt. Jeder Ausdruck, der der Liste hinzugefügt wird, erhält eine Zahl, um sie zu identifizieren, um einen Ausdruck aus der Liste zu entfernen, Sie geben diese Nummer an. Die automatische Anzeige sieht wie folgt aus: Diese Anzeige zeigt Artikelnummern, Ausdrücke und deren aktuelle Werte an. Wie bei Displays manuell manuell mit x oder drucken. Sie können das Ausgabeformat angeben, das Sie in der Tat bevorzugen, die Anzeige entscheidet, ob Sie print oder x verwenden, je nachdem, wie Sie Ihre Formatspezifikation ausarbeiten - es verwendet x, wenn Sie eine Einheitsgröße oder eines der beiden Formate (i und s) Die nur von x unterstützt werden. Display expr Fügen Sie den Ausdruck expr zur Liste der Ausdrücke hinzu, um anzuzeigen, jedes Mal, wenn Ihr Programm stoppt. Siehe Abschnitt Ausdrücke. Die Anzeige wird nicht wiederholt, wenn Sie nach dem Gebrauch erneut RET drücken. Display fmt expr Für fmt, das nur ein Anzeigeformat angibt und nicht eine Größe oder Anzahl, fügen Sie den Ausdruck expr zur Auto-Display-Liste hinzu, aber ordnen Sie es jedes Mal im angegebenen Format fmt anzuzeigen. Siehe Abschnitt Ausgabeformate. Display fmt addr Für fmt i oder s. Oder mit einer Einheitsgröße oder einer Anzahl von Einheiten, fügen Sie den Ausdruck addr als Speicheradresse hinzu, die bei jedem Programmstart untersucht werden soll. Untersuchen bedeutet in der Tat x fmt addr. Siehe Abschnitt Gedächtnis untersuchen. Zum Beispiel kann displayi pc hilfreich sein, um zu sehen, wie die Maschinenanweisung bei jeder Ausführung ausgeführt wird (pc ist ein gemeinsamer Name für den Programmzähler siehe Abschnitt Register). Unauffällige dnums Löschen dnums löschen Entfernen Sie die Artikelnummern aus der Liste der Ausdrücke, die angezeigt werden sollen. Andisplay nicht wiederholen, wenn Sie RET nach der Verwendung drücken. (Andernfalls bekommst du nur den Fehler Keine Displaynummer.) Deaktivieren Sie Displaydnums. Deaktivieren Sie die Anzeige der Artikelnummern. Ein deaktiviertes Display wird nicht automatisch gedruckt, ist aber nicht vergessen. Es kann später wieder aktiviert werden. Aktivieren Sie Displays. Aktivieren Sie die Anzeige der Artikelnummern. Es wird wieder einmal in der automatischen Anzeige seines Ausdrucks wirksam, bis Sie etwas anderes angeben. Display Zeigen Sie die aktuellen Werte der Ausdrücke in der Liste an, genau wie bei Ihrem Programm. Info-Anzeige Drucken Sie die Liste der zuvor eingestellten Ausdrücke, die jeweils mit ihrer Artikelnummer angezeigt werden, aber ohne die Werte anzuzeigen. Dazu gehören behinderte Ausdrücke, die als solche gekennzeichnet sind. Es enthält auch Ausdrücke, die momentan nicht angezeigt werden, weil sie sich auf automatische Variablen beziehen, die derzeit nicht verfügbar sind. Wenn ein Anzeigeausdruck auf lokale Variablen verweist, dann ist es nicht sinnvoll, außerhalb des lexikalischen Kontexts, für den es eingerichtet wurde. Ein solcher Ausdruck ist deaktiviert, wenn die Ausführung in einen Kontext eintritt, in dem eine ihrer Variablen nicht definiert ist. Zum Beispiel, wenn Sie die Befehlsanzeige lastchar während innerhalb einer Funktion mit einem Argument lastchar geben. GDB zeigt dieses Argument an, während Ihr Programm weiterhin in dieser Funktion aufhört. Wenn es anderswo anhält - wo es keine Variable Lastchar gibt - wird die Anzeige automatisch deaktiviert. Das nächste Mal, wenn dein Programm aufhört, wo lastchar aussagekräftig ist, kannst du den Display-Ausdruck noch einmal aktivieren. Sie können die eingestellte Druckadresse ausschalten, um alle maschinenabhängigen Anzeigen aus der GDB-Schnittstelle zu eliminieren. Zum Beispiel mit Druckadresse aus. Sie sollten den gleichen Text für Backtraces auf allen Maschinen erhalten - egal, ob es sich um Zeiger-Argumente handelt. Druckadresse anzeigen Zeigen, ob Adressen gedruckt werden sollen oder nicht. Wenn GDB eine symbolische Adresse druckt, druckt es normalerweise das nächstliegende Symbol plus einen Offset. Wenn dieses Symbol die Adresse nicht eindeutig identifiziert (zB ein Name, dessen Umfang eine einzelne Quelldatei ist), müssen Sie eventuell klären. Ein Weg, dies zu tun ist mit Info-Zeile. Zum Beispiel info line 0x4537. Alternativ können Sie GDB einstellen, um die Quelldatei und die Zeilennummer zu drucken, wenn sie eine symbolische Adresse ausdruckt: setzen Sie den Drucksymbol-Dateinamen auf Sagen Sie GDB, um den Quelldateinamen und die Zeilennummer eines Symbols in der symbolischen Form einer Adresse zu drucken. Setzen Sie den Drucksymbol-Dateinamen aus. Drucken Sie nicht den Quelldateinamen und die Zeilennummer eines Symbols aus. Dies ist die Voreinstellung. Show print symbol-filename Zeigen Sie an, ob GDB den Quelldateinamen und die Zeilennummer eines Symbols in der symbolischen Form einer Adresse ausdruckt. Eine andere Situation, wo es hilfreich ist, Symbol-Dateinamen und Zeilennummern anzuzeigen, ist beim Zerlegen von Code GDB zeigt Ihnen die Zeilennummer und Quelldatei, die jeder Anweisung entspricht. Außerdem können Sie die symbolische Form nur sehen, wenn die zu druckende Adresse in der Nähe des nächstgelegenen früheren Symbols liegt: set print max-symbolisch-offset max-offset Sagen Sie GDB, um nur die symbolische Form einer Adresse anzuzeigen, wenn der Versatz zwischen Das nächstliegende Symbol und die Adresse ist kleiner als max-offset. Die Voreinstellung ist 0, die GDB anweist, immer die symbolische Form einer Adresse zu drucken, wenn ein Symbol vorangeht. Show print max-symbolic-offset Fragen Sie, wie groß der maximale Versatz ist, dass GDB in einer symbolischen Adresse druckt. Wenn du einen Zeiger hast und du nicht sicher bist, wo es punktiert, versuchst du den Drucksymbol-Dateinamen ein. Dann können Sie den Namen und die Quelldatei Speicherort der Variablen, wo es Punkte, mit pa Zeiger zu bestimmen. Dies interpretiert die Adresse in symbolischer Form. Zum Beispiel zeigt hier GDB, dass eine Variable ptt auf eine andere Variable t zeigt. Definiert in hi2.c. Warnung: Bei Zeigern, die auf eine lokale Variable verweisen, zeigt pa nicht den Symbolnamen und den Dateinamen des Referenten an, auch wenn die entsprechenden Druckoptionen aktiviert sind. Andere Einstellungen steuern, wie verschiedene Arten von Objekten gedruckt werden: set print array set print array auf Pretty print arrays. Dieses Format ist bequemer zu lesen, verwendet aber mehr Platz. Der Standardwert ist deaktiviert. Setze das Array aus. Zurück zum komprimierten Format für Arrays. Show print array Zeigen Sie, ob komprimiertes oder hübsches Format für die Anzeige von Arrays ausgewählt ist. Set print elements number-of-elements Legt fest, wie viele Elemente eines Array-GDB drucken werden. Wenn GDB ein großes Array druckt, stoppt es das Drucken, nachdem es die Anzahl der Elemente gedruckt hat, die durch den Befehl set print elements gesetzt wurden. Diese Grenze gilt auch für die Anzeige von Saiten. Wenn GDB startet, wird diese Grenze auf 200 gesetzt. Die Einstellung der Anzahl der Elemente auf Null bedeutet, dass der Druck unbegrenzt ist. Show print elements Zeigt die Anzahl der Elemente eines großen Arrays an, die GDB drucken wird. Wenn die Nummer 0 ist, ist das Drucken unbegrenzt. Set print null-stop Ursache GDB, um das Drucken der Zeichen eines Arrays zu stoppen, wenn das erste NULL angetroffen wird. Dies ist sinnvoll, wenn große Arrays tatsächlich nur kurze Strings enthalten. Der Standardwert ist deaktiviert. Setzen Sie den Druck ziemlich auf Ursache GDB, um Strukturen in einem eingekerbten Format mit einem Mitglied pro Zeile zu drucken, wie folgt: setzen Sie den Druck ziemlich aus. Ursache GDB, um Strukturen in einem kompakten Format zu drucken, wie dies: Dies ist das Standardformat. Show print pretty Zeigen Sie, welches Format GDB verwendet, um Strukturen zu drucken. Setze siebenbit-Strings auf Print mit nur sieben-Bit-Zeichen, wenn diese Option gesetzt ist, GDB zeigt alle 8-Bit-Zeichen (in Strings oder Zeichen-Werte) mit der Notation nnn. Diese Einstellung ist am besten, wenn Sie in Englisch arbeiten (ASCII) und Sie verwenden das High-Order-Bit von Zeichen als Marker oder Meta-Bit. Set print sevenbit-strings aus Print full eight-bit Zeichen. Dies ermöglicht die Verwendung von mehr internationalen Zeichensätzen und ist der Standard. Show print sevenbit-strings Zeigen Sie, ob GDB nur sieben-Bit-Zeichen druckt oder nicht. Stelle Druckvereinigung auf Tell GDB, um Gewerkschaften zu drucken, die in den Strukturen enthalten sind. Dies ist die Standardeinstellung. Setzen Sie den Druckverband aus. Geben Sie GDB nicht an, um Gewerkschaften zu drucken, die in Strukturen enthalten sind. Show print union Fragen Sie GDB, ob es die Gewerkschaften drucken wird, die in den Strukturen enthalten sind. Zum Beispiel bei den Deklarationen Diese Einstellungen sind bei der Debugging von C-Programmen von Interesse: Setzen Sie das Druck-Demangle-Set-Druck-Demangle auf Print-C-Namen in ihrer Quellform und nicht in die codierte (mangled) Form, die an den Assembler und Linker für die typsichere Verknüpfung übergeben wurde . Die Voreinstellung ist aktiviert. Show print decangle Zeigen Sie, ob C-Namen in verstümmelter oder abgerundeter Form gedruckt werden. Setzen Sie print asm-demangle set print asm-demangle auf Print C-Namen in ihrer Quellform anstatt ihre mangled Form, auch in Assembler-Code-Ausdrucken wie Anleitung Disassemblies. Der Standardwert ist deaktiviert. Show print asm-demangle Zeigen Sie, ob C-Namen in Montagelisten in verstümmelter oder abgerundeter Form gedruckt sind. Set decangle-style style Wählen Sie aus mehreren Codierungsschemata, die von verschiedenen Compilern verwendet werden, um C-Namen darzustellen. Die Wahlmöglichkeiten für Stil sind derzeit: auto Erlaube GDB, einen Decodierungsstil zu wählen, indem du dein Programm kontrollierst. Gnu Decode basiert auf dem GNU C Compiler (g) Codierungsalgorithmus. Dies ist die Voreinstellung. Hp Decode basierend auf dem HP ANSI C (aCC) Kodierungsalgorithmus. Lucid Decode basierend auf dem Lucid C Compiler (lcc) Codierungsalgorithmus. Arm Decode mit dem Algorithmus im C Annotated Reference Manual. Warnung: Diese Einstellung allein reicht nicht aus, um das Debuggen von Cfront-generierten ausführbaren Dateien zu ermöglichen. GDB würde eine weitere Verbesserung erfordern, um das zu erlauben. Wenn du Stil weglest. Sie sehen eine Liste der möglichen Formate. Show demangle-style Zeigen Sie den aktuell verwendeten Codierungsstil für die Decodierung von C-Symbolen an. Setzen Sie das Druckobjekt-Set-Druckobjekt an Wenn Sie einen Zeiger auf ein Objekt anzeigen, markieren Sie den tatsächlichen (abgeleiteten) Typ des Objekts und nicht den deklarierten Typ mit der virtuellen Funktionstabelle. Druckobjekt ausschalten Nur den deklarierten Objekttyp anzeigen, ohne Bezug auf die virtuelle Funktionstabelle. Dies ist die Standardeinstellung. Show print object Zeigen Sie, ob aktuell oder deklariert, Objekttypen angezeigt werden. Set print static-members set print static-members auf Print static members bei der Anzeige eines C-Objekts. Die Voreinstellung ist aktiviert. Set print static-members aus Keine statischen Mitglieder bei der Anzeige eines C-Objekts drucken. Show print static-members Zeigen Sie, ob C statische Mitglieder gedruckt sind oder nicht. Set print vtbl set print vtbl auf Pretty print C virtuelle Funktionstabellen. Der Standardwert ist deaktiviert. (Die vtbl-Befehle funktionieren nicht mit Programmen, die mit dem HP ANSI C-Compiler (aCC) kompiliert wurden.) Set print vtbl off Hübsche Druckschrift C virtuelle Funktionstabellen. Show print vtbl Zeigen Sie, ob C virtuelle Funktionstabellen sehr gedruckt sind oder nicht. 8.9 Convenience-Variablen GDB bietet Bequemlichkeitsvariablen, die Sie innerhalb des GDB nutzen können, um einen Wert zu halten und später darauf zu verweisen. Diese Variablen existieren vollständig innerhalb des GDB, sie sind nicht Teil Ihres Programms und die Einstellung einer Bequemlichkeitsvariable hat keinen direkten Einfluss auf die weitere Ausführung Ihres Programms. Deshalb kannst du sie frei nutzen. Convenience Variablen sind vorangestellt. Jeder Name, der vorangestellt wird, kann für eine Bequemlichkeitsvariable verwendet werden, es sei denn, er ist einer der vordefinierten maschinenspezifischen Registernamen (siehe Abschnitt Register). (Werteverlaufsreferenzen dagegen sind Zahlen vorangestellt, siehe Abschnitt Werthistorie.) Sie können einen Wert in einer Bequemlichkeitsvariable mit einem Zuweisungsausdruck speichern, so wie Sie eine Variable in Ihrem Programm setzen würden. Zum Beispiel: würde in foo den Wert speichern, der in dem Objekt enthalten ist, auf das objectptr zeigt. Mit einer Convenience-Variable zum ersten Mal schafft es, aber sein Wert ist ungültig, bis Sie einen neuen Wert zuweisen. Sie können den Wert jederzeit mit einer anderen Zuordnung ändern. Convenience-Variablen haben keine festen Typen. Sie können eine Bequemlichkeitsvariable jede Art von Wert, einschließlich Strukturen und Arrays, zuweisen, auch wenn diese Variable bereits einen Wert eines anderen Typs hat. Die Bequemlichkeitsvariable, wenn sie als Ausdruck verwendet wird, hat den Typ ihres aktuellen Wertes. Zeigen Bequemlichkeit Drucken Sie eine Liste der Bequemlichkeitsvariablen, die bisher verwendet wurden, und ihre Werte. Abgekürzte Show conv. Eine der Möglichkeiten, eine Bequemlichkeitsvariable zu verwenden, ist als Zähler inkrementiert oder ein Zeiger, der vorgerückt werden soll. Zum Beispiel, um ein Feld aus aufeinanderfolgenden Elementen eines Arrays von Strukturen zu drucken: Wiederholen Sie diesen Befehl, indem Sie RET eingeben. Einige Bequemlichkeitsvariablen werden automatisch von GDB erstellt und gegebene Werte, die wahrscheinlich nützlich sind. Die Variable wird automatisch durch den Befehl x auf die zuletzt geprüfte Adresse gesetzt (siehe Abschnitt Gedicht prüfen). Andere Befehle, die eine Standardadresse für x zu prüfen, auch auf diese Adresse setzen diese Befehle enthalten Info-Zeile und Info-Haltepunkt. Der Typ ist ungültig, außer wenn er durch den Befehl x gesetzt ist. In diesem Fall handelt es sich um einen Zeiger auf den Typ von. Die Variable wird automatisch durch den Befehl x auf den Wert gesetzt, der in der letzten untersuchten Adresse gefunden wurde. Sein Typ wird so gewählt, dass er dem Format entspricht, in dem die Daten gedruckt wurden. Exitcode Der Variable exitcode wird automatisch auf den Exit-Code gesetzt, wenn das zu debuggende Programm beendet wird. Bei HP-UX-Systemen sucht GDB nach einer Funktion oder einem Variablennamen, der mit einem Dollarzeichen beginnt, zuerst einen Benutzer oder einen Systemnamen, bevor er nach einer Bequemlichkeitsvariable sucht. 8.12 Speicherbereichsattribute Speicherbereichsattribute erlauben es Ihnen, eine spezielle Behandlung zu beschreiben, die von den Regionen Ihres Zielspeichers benötigt wird. GDB verwendet Attribute, um festzustellen, ob bestimmte Arten von Speicherzugriffen zulässig sind, ob bestimmte Zugriffszüge verwendet werden sollen und ob der Zielspeicher zwischengespeichert werden soll. Definierte Speicherbereiche können einzeln aktiviert und deaktiviert werden. Wenn ein Speicherbereich deaktiviert ist, verwendet GDB die Standardattribute beim Zugriff auf Speicher in diesem Bereich. Ähnlich, wenn keine Speicherbereiche definiert wurden, verwendet GDB die Standardattribute beim Zugriff auf alle Speicher. Wenn ein Speicherbereich definiert ist, erhält er eine Nummer, um ihn zu identifizieren, um einen Speicherbereich zu aktivieren, zu deaktivieren oder zu entfernen. Sie geben diese Nummer an. Mem address1 address2 Attribute. Definieren Sie den Speicherbereich, der durch address1 und address2 mit Attributattributen begrenzt ist. . Löschen nummern. Entfernen von Speicherbereichen. . Spalte deaktivieren. Deaktivieren Sie Speicherbereiche. . Ein deaktivierter Speicherbereich ist nicht vergessen. Es kann später wieder aktiviert werden. Aktivierungen zulassen. Freigaben von Speicherbereichen. . Info mem Drucken Sie eine Tabelle aller definierten Speicherbereiche mit den folgenden Spalten für jede Region. Speicher Region Nummer aktiviert oder deaktiviert. Enable Speicherbereiche sind mit y markiert. Deaktivierte Speicherbereiche sind mit n markiert. Lo Adresse Die Adresse, die die integrierte untere Grenze des Speicherbereichs definiert. Hallo Adresse Die Adresse, die die exklusive obere Grenze des Speicherbereichs definiert. Attribute Die Liste der Attribute, die für diesen Speicherbereich festgelegt wurden. 8.13 Kopieren zwischen Speicher und Datei Die Befehle dump. Anhängen Und Wiederherstellung werden zum Kopieren von Daten zwischen dem Zielspeicher und einer Datei verwendet. Daten werden in eine Datei mit Dump oder Append geschrieben. Und wiederhergestellt aus einer Datei in den Speicher durch die Wiederherstellung. Dateien können binär, srec, intel hex oder tekhex (aber nur Binärdateien können angehängt werden). Dump Binärspeicher Dateiname startaddr endaddr Dump Inhalt des Speichers von startaddr zu endaddr in roh binären Format Datei Dateiname. Anhängen binärer Speicher Dateiname startaddr endaddr Anhängen Inhalt des Speichers von startaddr zu endaddr zu rohen Binärformat Datei Dateiname. Dump-Binärwert Dateiname-Ausdruck Dump-Wert des Ausdrucks in rohe Binärformatdatei Dateiname. Append Binärspeicher Dateiname Ausdruck Anfügen Wert des Ausdrucks in rohe Binärformat Datei Dateiname. Dump ihex Speicher Dateiname startaddr endaddr Dump Inhalt des Speichers von startaddr zu endaddr in Intel Hex Format Datei Dateiname. Dump ihex-Wert Dateinamen-Ausdruck Dump-Wert des Ausdrucks in Intel-Hex-Format Datei Dateiname. Dump srec Speicher Dateiname startaddr endaddr Dump Inhalt des Speichers von startaddr zu endaddr in srec format file Dateiname. Dump srec value Dateiname Ausdruck Dump Wert des Ausdrucks in Srec Format Datei Dateiname. Dump tekhex Speicher Dateiname startaddr endaddr Dump Inhalt des Speichers von startaddr zu endaddr in tekhex Format Datei Dateiname. Dump tekhex value Dateiname Ausdruck Dump Wert des Ausdrucks in tekhex Format Datei Dateiname. Wiederherstellung des Dateinamens Binär-Bias-Start-End Wiederherstellen des Inhalts des Datei-Dateinamens in den Speicher. Der Wiederherstellungsbefehl kann jedes bekannte Bfd-Dateiformat automatisch erkennen, außer für rohe Binärdateien. Um eine rohe Binärdatei wiederherzustellen, müssen Sie die optionale Argument-Binärdatei nach dem Dateinamen verwenden. Wenn die Bias ungleich Null ist, wird ihr Wert den in der Datei enthaltenen Adressen hinzugefügt. Binäre Dateien beginnen immer bei der Adresse null, so dass sie bei der Adresse Bias wiederhergestellt werden. Andere bfd-Dateien haben einen eingebauten Ort, den sie bei Offset-Bias von diesem Ort wiederhergestellt werden. Wenn start andor end nicht ungleich Null ist, werden nur Daten zwischen file offset start und file offset end wiederhergestellt. Diese Offsets sind relativ zu den Adressen in der Datei, bevor das Bias-Argument angewendet wird.18.1 Befehle zum Festlegen von Dateien Sie können ausführbare und Core-Dump-Dateinamen angeben. Der übliche Weg, dies zu tun, ist in der Startzeit, mit den Argumenten zu gdb s Start-up-Befehle (siehe Getting In und Out von gdb). Gelegentlich ist es notwendig, in einer anderen Datei während einer gdb-Sitzung zu wechseln. Oder Sie können gdb ausführen und vergessen, eine Datei anzugeben, die Sie verwenden möchten. Oder du bist ein Debugging eines entfernten Ziels über gdbserver (siehe Datei). In diesen Situationen sind die gdb-Befehle, neue Dateien anzugeben, nützlich. File Dateiname Verwenden Sie den Dateinamen als das zu debuggende Programm. Es wird für seine Symbole und für den Inhalt des reinen Gedächtnisses gelesen. Es ist auch das Programm ausgeführt, wenn Sie den Befehl run verwenden. If you do not specify a directory and the file is not found in the gdb working directory, gdb uses the environment variable PATH as a list of directories to search, just as the shell does when looking for a program to run. You can change the value of this variable, for both gdb and your program, using the path command. You can load unlinked object. o files into gdb using the file command. You will not be able to ldquorunrdquo an object file, but you can disassemble functions and inspect variables. Also, if the underlying BFD functionality supports it, you could use gdb - write to patch object files using this technique. Note that gdb can neither interpret nor modify relocations in this case, so branches and some initialized variables will appear to go to the wrong place. But this feature is still handy from time to time. file file with no argument makes gdb discard any information it has on both executable file and the symbol table. exec-file filename Specify that the program to be run (but not the symbol table) is found in filename. gdb searches the environment variable PATH if necessary to locate your program. Omitting filename means to discard information on the executable file. symbol-file filename Read symbol table information from file filename. PATH is searched when necessary. Use the file command to get both symbol table and program to run from the same file. symbol-file with no argument clears out gdb information on your programs symbol table. The symbol-file command causes gdb to forget the contents of some breakpoints and auto-display expressions. This is because they may contain pointers to the internal data recording symbols and data types, which are part of the old symbol table data being discarded inside gdb. symbol-file does not repeat if you press ltRETgt again after executing it once. When gdb is configured for a particular environment, it understands debugging information in whatever format is the standard generated for that environment you may use either a gnu compiler, or other compilers that adhere to the local conventions. Best results are usually obtained from gnu compilers for example, using gcc you can generate debugging information for optimized code. For most kinds of object files, with the exception of old SVR3 systems using COFF, the symbol-file command does not normally read the symbol table in full right away. Instead, it scans the symbol table quickly to find which source files and which symbols are present. The details are read later, one source file at a time, as they are needed. The purpose of this two-stage reading strategy is to make gdb start up faster. For the most part, it is invisible except for occasional pauses while the symbol table details for a particular source file are being read. (The set verbose command can turn these pauses into messages if desired. See Optional Warnings and Messages .) We have not implemented the two-stage strategy for COFF yet. When the symbol table is stored in COFF format, symbol-file reads the symbol table data in full right away. Note that ldquostabs-in-COFFrdquo still does the two-stage strategy, since the debug info is actually in stabs format. symbol-file - readnow filename file - readnow filename You can override the gdb two-stage strategy for reading symbol tables by using the lsquo - readnow rsquo option with any of the commands that load symbol table information, if you want to be sure gdb has the entire symbol table available. core-file filename core Specify the whereabouts of a core dump file to be used as the ldquocontents of memoryrdquo. Traditionally, core files contain only some parts of the address space of the process that generated them gdb can access the executable file itself for other parts. core-file with no argument specifies that no core file is to be used. Note that the core file is ignored when your program is actually running under gdb. So, if you have been running your program and you wish to debug a core file instead, you must kill the subprocess in which the program is running. To do this, use the kill command (see Killing the Child Process ). add-symbol-file filename address add-symbol-file filename address - readnow add-symbol-file filename address - s section address. The add-symbol-file command reads additional symbol table information from the file filename. You would use this command when filename has been dynamically loaded (by some other means) into the program that is running. The address should give the memory address at which the file has been loaded gdb cannot figure this out for itself. You can additionally specify an arbitrary number of lsquo - s section address rsquo pairs, to give an explicit section name and base address for that section. You can specify any address as an expression. The symbol table of the file filename is added to the symbol table originally read with the symbol-file command. You can use the add-symbol-file command any number of times the new symbol data thus read is kept in addition to the old. Changes can be reverted using the command remove-symbol-file. Although filename is typically a shared library file, an executable file, or some other object file which has been fully relocated for loading into a process, you can also load symbolic information from relocatable. o files, as long as: the files symbolic information refers only to linker symbols defined in that file, not to symbols defined by other object files, every section the files symbolic information refers to has actually been loaded into the inferior, as it appears in the file, and you can determine the address at which every section was loaded, and provide these to the add-symbol-file command. Some embedded operating systems, like Sun Chorus and VxWorks, can load relocatable files into an already running program such systems typically make the requirements above easy to meet. However, its important to recognize that many native systems use complex link procedures (.linkonce section factoring and C constructor table assembly, for example) that make the requirements difficult to meet. In general, one cannot assume that using add-symbol-file to read a relocatable object files symbolic information will have the same effect as linking the relocatable object file into the program in the normal way. add-symbol-file does not repeat if you press ltRETgt after using it. remove-symbol-file filename remove-symbol-file - a address Remove a symbol file added via the add-symbol-file command. The file to remove can be identified by its filename or by an address that lies within the boundaries of this symbol file in memory. Example: remove-symbol-file does not repeat if you press ltRETgt after using it. add-symbol-file-from-memory address Load symbols from the given address in a dynamically loaded object file whose image is mapped directly into the inferiors memory. For example, the Linux kernel maps a syscall DSO into each processs address space this DSO provides kernel-specific code for some system calls. The argument can be any expression whose evaluation yields the address of the files shared object file header. For this command to work, you must have used symbol-file or exec-file commands in advance. section section addr The section command changes the base address of the named section of the exec file to addr. This can be used if the exec file does not contain section addresses, (such as in the a. out format), or when the addresses specified in the file itself are wrong. Each section must be changed separately. The info files command, described below, lists all the sections and their addresses. info files info target info files and info target are synonymous both print the current target (see Specifying a Debugging Target ), including the names of the executable and core dump files currently in use by gdb. and the files from which symbols were loaded. The command help target lists all possible targets rather than current ones. maint info sections Another command that can give you extra information about program sections is maint info sections. In addition to the section information displayed by info files. this command displays the flags and file offset of each section in the executable and core dump files. In addition, maint info sections provides the following command options (which may be arbitrarily combined): ALLOBJ Display sections for all loaded object files, including shared libraries. sections Display info only for named sections. section-flags Display info only for sections for which section-flags are true. The section flags that gdb currently knows about are: ALLOC Section will have space allocated in the process when loaded. Set for all sections except those containing debug information. LOAD Section will be loaded from the file into the child process memory. Set for pre-initialized code and data, clear for. bss sections. RELOC Section needs to be relocated before loading. READONLY Section cannot be modified by the child process. CODE Section contains executable code only. DATA Section contains data only (no executable code). ROM Section will reside in ROM. CONSTRUCTOR Section contains data for constructordestructor lists. HASCONTENTS Section is not empty. NEVERLOAD An instruction to the linker to not output the section. COFFSHAREDLIBRARY A notification to the linker that the section contains COFF shared library information. ISCOMMON Section contains common symbols. set trust-readonly-sections on Tell gdb that readonly sections in your object file really are read-only (i. e. that their contents will not change). In that case, gdb can fetch values from these sections out of the object file, rather than from the target program. For some targets (notably embedded ones), this can be a significant enhancement to debugging performance. The default is off. set trust-readonly-sections off Tell gdb not to trust readonly sections. This means that the contents of the section might change while the program is running, and must therefore be fetched from the target when needed. show trust-readonly-sections Show the current setting of trusting readonly sections. All file-specifying commands allow both absolute and relative file names as arguments. gdb always converts the file name to an absolute file name and remembers it that way. gdb supports gnu Linux, MS-Windows, SunOS, DarwinMach-O, SVr4, IBM RS6000 AIX, QNX Neutrino, FDPIC (FR-V), and DSBT (TIC6X) shared libraries. On MS-Windows gdb must be linked with the Expat library to support shared libraries. See Expat. gdb automatically loads symbol definitions from shared libraries when you use the run command, or when you examine a core file. (Before you issue the run command, gdb does not understand references to a function in a shared library, howevermdashunless you are debugging a core file). There are times, however, when you may wish to not automatically load symbol definitions from shared libraries, such as when they are particularly large or there are many of them. To control the automatic loading of shared library symbols, use the commands: set auto-solib-add mode If mode is on. symbols from all shared object libraries will be loaded automatically when the inferior begins execution, you attach to an independently started inferior, or when the dynamic linker informs gdb that a new library has been loaded. If mode is off. symbols must be loaded manually, using the sharedlibrary command. The default value is on. If your program uses lots of shared libraries with debug info that takes large amounts of memory, you can decrease the gdb memory footprint by preventing it from automatically loading the symbols from shared libraries. To that end, type set auto-solib-add off before running the inferior, then load each library whose debug symbols you do need with sharedlibrary regexp. where regexp is a regular expression that matches the libraries whose symbols you want to be loaded. show auto-solib-add Display the current autoloading mode. To explicitly load shared library symbols, use the sharedlibrary command: info share regex info sharedlibrary regex Print the names of the shared libraries which are currently loaded that match regex. If regex is omitted then print all shared libraries that are loaded. info dll regex This is an alias of info sharedlibrary. sharedlibrary regex share regex Load shared object library symbols for files matching a Unix regular expression. As with files loaded automatically, it only loads shared libraries required by your program for a core file or after typing run. If regex is omitted all shared libraries required by your program are loaded. nosharedlibrary Unload all shared object library symbols. This discards all symbols that have been loaded from all shared libraries. Symbols from shared libraries that were loaded by explicit user requests are not discarded. Sometimes you may wish that gdb stops and gives you control when any of shared library events happen. The best way to do this is to use catch load and catch unload (see Set Catchpoints ). gdb also supports the the set stop-on-solib-events command for this. This command exists for historical reasons. It is less useful than setting a catchpoint, because it does not allow for conditions or commands as a catchpoint does. set stop-on-solib-events This command controls whether gdb should give you control when the dynamic linker notifies it about some shared library event. The most common event of interest is loading or unloading of a new shared library. show stop-on-solib-events Show whether gdb stops and gives you control when shared library events happen. Shared libraries are also supported in many cross or remote debugging configurations. gdb needs to have access to the targets libraries this can be accomplished either by providing copies of the libraries on the host system, or by asking gdb to automatically retrieve the libraries from the target. If copies of the target libraries are provided, they need to be the same as the target libraries, although the copies on the target can be stripped as long as the copies on the host are not. For remote debugging, you need to tell gdb where the target libraries are, so that it can load the correct copiesmdashotherwise, it may try to load the hosts libraries. gdb has two variables to specify the search directories for target libraries. set sysroot path Use path as the system root for the program being debugged. Any absolute shared library paths will be prefixed with path many runtime loaders store the absolute paths to the shared library in the target programs memory. When starting processes remotely, and when attaching to already-running processes (local or remote), their executable filenames will be prefixed with path if reported to gdb as absolute by the operating system. If you use set sysroot to find executables and shared libraries, they need to be laid out in the same way that they are on the target, with e. g. a bin. lib and usrlib hierarchy under path. If path starts with the sequence target: and the target system is remote then gdb will retrieve the target binaries from the remote system. This is only supported when using a remote target that supports the remote get command (see Sending files to a remote system ). The part of path following the initial target: (if present) is used as system root prefix on the remote file system. If path starts with the sequence remote: this is converted to the sequence target: by set sysroot 1. If you want to specify a local system root using a directory that happens to be named target: or remote. you need to use some equivalent variant of the name like. target. For targets with an MS-DOS based filesystem, such as MS-Windows and SymbianOS, gdb tries prefixing a few variants of the target absolute file name with path. But first, on Unix hosts, gdb converts all backslash directory separators into forward slashes, because the backslash is not a directory separator on Unix: Then, gdb attempts prefixing the target file name with path. and looks for the resulting file name in the host file system: If that does not find the binary, gdb tries removing the lsquo. rsquo character from the drive spec, both for convenience, and, for the case of the host file system not supporting file names with colons: This makes it possible to have a system root that mirrors a target with more than one drive. Z. B. you may want to setup your local copies of the target system shared libraries like so (note lsquo c rsquo vs lsquo z rsquo): and point the system root at pathtosysroot. so that gdb can find the correct copies of both c:sysbinfoo. dll. and z:sysbinbar. dll. If that still does not find the binary, gdb tries removing the whole drive spec from the target file name: This last lookup makes it possible to not care about the drive name, if you dont want or need to. The set solib-absolute-prefix command is an alias for set sysroot. You can set the default system root by using the configure-time lsquo --with-sysroot rsquo option. If the system root is inside gdb s configured binary prefix (set with lsquo --prefix rsquo or lsquo --exec-prefix rsquo), then the default system root will be updated automatically if the installed gdb is moved to a new location. show sysroot Display the current executable and shared library prefix. set solib-search-path path If this variable is set, path is a colon-separated list of directories to search for shared libraries. lsquo solib-search-path rsquo is used after lsquo sysroot rsquo fails to locate the library, or if the path to the library is relative instead of absolute. If you want to use lsquo solib-search-path rsquo instead of lsquo sysroot rsquo, be sure to set lsquo sysroot rsquo to a nonexistent directory to prevent gdb from finding your hosts libraries. lsquo sysroot rsquo is preferred setting it to a nonexistent directory may interfere with automatic loading of shared library symbols. show solib-search-path Display the current shared library search path. set target-file-system-kind kind Set assumed file system kind for target reported file names. Shared library file names as reported by the target system may not make sense as is on the system gdb is running on. For example, when remote debugging a target that has MS-DOS based file system semantics, from a Unix host, the target may be reporting to gdb a list of loaded shared libraries with file names such as c:Windowskernel32.dll. On Unix hosts, theres no concept of drive letters, so the lsquo c: rsquo prefix is not normally understood as indicating an absolute file name, and neither is the backslash normally considered a directory separator character. In that case, the native file system would interpret this whole absolute file name as a relative file name with no directory components. This would make it impossible to point gdb at a copy of the remote targets shared libraries on the host using set sysroot. and impractical with set solib-search-path. Setting target-file-system-kind to dos-based tells gdb to interpret such file names similarly to how the target would, and to map them to file names valid on gdb s native file system semantics. The value of kind can be auto. in addition to one of the supported file system kinds. In that case, gdb tries to determine the appropriate file system variant based on the current targets operating system (see Configuring the Current ABI ). The supported file system settings are: unix Instruct gdb to assume the target file system is of Unix kind. Only file names starting the forward slash (lsquo rsquo) character are considered absolute, and the directory separator character is also the forward slash. dos-based Instruct gdb to assume the target file system is DOS based. File names starting with either a forward slash, or a drive letter followed by a colon (e. g. lsquo c: rsquo), are considered absolute, and both the slash (lsquo rsquo) and the backslash (lsquo rsquo) characters are considered directory separators. auto Instruct gdb to use the file system kind associated with the target operating system (see Configuring the Current ABI ). This is the default. When processing file names provided by the user, gdb frequently needs to compare them to the file names recorded in the programs debug info. Normally, gdb compares just the base names of the files as strings, which is reasonably fast even for very large programs. (The base name of a file is the last portion of its name, after stripping all the leading directories.) This shortcut in comparison is based upon the assumption that files cannot have more than one base name. This is usually true, but references to files that use symlinks or similar filesystem facilities violate that assumption. If your program records files using such facilities, or if you provide file names to gdb using symlinks etc. you can set basenames-may-differ to true to instruct gdb to completely canonicalize each pair of file names it needs to compare. This will make file-name comparisons accurate, but at a price of a significant slowdown. set basenames-may-differ Set whether a source file may have multiple base names. show basenames-may-differ Show whether a source file may have multiple base names. 1 Historically the functionality to retrieve binaries from the remote system was provided by prefixing path with remote:GNU GDB Debugger Command Cheat Sheet Compile with the - g option (for most GNU and Intel compilers) which generates added information in the object code so the debugger can match a line of source code with the step of execution. Verwenden Sie keine Compiler-Optimierungsrichtlinie wie - O oder - O2, die Rechenoperationen neu anordnen, um Geschwindigkeit zu erlangen, da diese Neuordnung nicht mit der Reihenfolge der Ausführung im Quellcode übereinstimmt und es unmöglich ist, zu folgen. Controlc: Stoppen Sie die Ausführung. Es kann Programm überall aufhören, in deiner Quelle oder einer C-Bibliothek oder irgendwo. Zum Ausführen eines Shell-Befehls: Befehls - oder Shell-Befehl GDB-Befehlsabschluss: TAB-Schlüssel verwenden info bre TAB wird den Befehl ausfüllen, der zu Info-Haltepunkten führt. TAB zweimal drücken, um alle verfügbaren Optionen zu sehen, wenn mehr als eine Option verfügbar ist oder M-RETURN eingeben. GDB-Befehl Abkürzung: info bre RETURN arbeitet als bre ist eine gültige Abkürzung für Breakpoints De-Referenzierung STL Container: Anzeigen von STL Containerklassen mit dem GDB p Variablennamen ergibt eine kryptische Darstellung von Template-Definitionen und Pointern. Verwenden Sie Folgendes. Gdbinit-Datei (V1.03 091508). Jetzt arbeitet mit GDB 4.3. (Archivierte Versionen: V1.01 GDB 6.4 nur) Danke an Dr. Eng. Dan C. Marinescu für die Erlaubnis, dieses Skript zu veröffentlichen. Use the following commands provided by the script:
No comments:
Post a Comment