Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:gdb:start [2016-02-17 13:18]
abajric
software:gdb:start [2019-03-11 11:51] (aktuell)
Graf Urs
Zeile 6: Zeile 6:
   * [[https://​sourceware.org/​gdb/​download/​onlinedocs/​stabs/​ | STABS]]   * [[https://​sourceware.org/​gdb/​download/​onlinedocs/​stabs/​ | STABS]]
 </​box>​ </​box>​
 +===== Hauptfunktionen des GDB =====
 Der GNU Debugger erlaubt es, zu sehen, was in einem Programm während der Ausführung passiert oder was ein Programm zuletzt gemacht vor einem Absturz. Der GNU Debugger erlaubt es, zu sehen, was in einem Programm während der Ausführung passiert oder was ein Programm zuletzt gemacht vor einem Absturz.
  
Zeile 14: Zeile 14:
   * Untersuchen was geschehen ist, wenn das Programm angehalten wurde   * Untersuchen was geschehen ist, wenn das Programm angehalten wurde
   * Inhalt des Speichers ändern   * Inhalt des Speichers ändern
 +
  
 ===== Handhabung ===== ===== Handhabung =====
-GDB ist in vielen [[http://​de.wikipedia.org/​wiki/​Integrierte_Entwicklungsumgebung|IDE]]s (wie z.B. Eclipse) integriert und wird über das GUI bedient. Alternativ kann GDB auch über die Kommandozeile gestartet werden: +GDB ist in vielen [[http://​de.wikipedia.org/​wiki/​Integrierte_Entwicklungsumgebung|IDE]]s (wie z.B. Eclipse) integriert und wird über das GUI bedient. Alternativ kann GDB auch über die Kommandozeile gestartet werden. 
- +Das ist besonders nütztlich, um einen Segfault zu überprüfen.
-''​gdb executable_name''​ +
- +
-Programm starten: +
- +
-''​run arg1 arg2 arg3''​ +
- +
-Programm beenden: +
- +
-''​kill''​+
  
-GDB beenden:+Mehr dazu unter im [[software:gdb:​crashcoursegdb|Crashcourse gdb]]
  
-''​quit''​ 
  
-Alle GDB Befehle ​können ​mit der GDB-Hilfefunktion aufgelistet ​werden:+===== Coredumps ===== 
 +Mit Coredumps ​können ​Segfaults analysiert ​werden, ohne dass die Applikation im //gdb// gestartet wird. 
 +Ein //​Backtrace//​ kann im Nachhinen untersucht werden. 
 +Es ist ebenfalls möglich, lokale Variablen nach dem Absturz zu untersuchen.
  
-''​help''​+Mehr dazu unter unter [[software:​gdb:​coredump|software:​gdb:​coredump]].
  
  
Zeile 283: Zeile 277:
   * [[https://​sourceware.org/​gdb/​onlinedocs/​stabs/​Stab-Symbol-Types.html#​Stab-Symbol-Types| STABS Symboltypen]]   * [[https://​sourceware.org/​gdb/​onlinedocs/​stabs/​Stab-Symbol-Types.html#​Stab-Symbol-Types| STABS Symboltypen]]
  
-Definition von Typen ([[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​String-Field|String-Field]]):+=== Definition von Typen === 
 +([[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​String-Field|String-Field]]) 
 +Type 1 = void und Type 2 = int.
  
 <​code>​ <​code>​
Zeile 290: Zeile 286:
 </​code>​ </​code>​
  
-Definition von globalen Variablen ​in der .data Section ​[[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​Global-Variables|Global Variables]]:+=== Definition von globalen Variablen ​=== 
 + 
 +([[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​Global-Variables|Global Variables]]
 +Variable targetCommand an Adresse 0x100000 vom Type 2 = int.
  
 <​code>​ <​code>​
Zeile 301: Zeile 300:
 </​code>​ </​code>​
  
 +=== Definition vom Java-Sourcecode ===
  
 +([[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​Source-Files|Source Files]])
 +Der erste STABS mit N_SO ist der Build-Ordner. Der Zweite ist der relative Pfad zum Source-File.
 +
 +<​code>​
 +.org 0x400100
 +.stabs "/​home/​abajric/​ntb/​deep/​ws/​runtime-library/",​N_SO,​0,​0,​Ltext0
 +.stabs "​src/​ch/​ntb/​inf/​deep/​runtime/​mpc555/​Reset.java",​N_SO,​0,​0,​Ltext0
 +.text
 +Ltext0:
 +</​code>​
 +
 +=== Definition von Zeilennummern ===
 +
 +([[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​Line-Numbers|Line Numbers]])
 +
 +<​code>​
 +reset:
 +.stabn N_SLINE, 0, 38, LM1
 +LM1:
 +
 +...
 +
 +.stabn N_SLINE, 0, 41, LM5
 +LM6:
 +
 +...
 +
 +.stabn N_SLINE, 0, 47, LM4
 +LM4:
 +</​code>​
 +
 +
 +
 +=== Definition von Registervariablen ===
 +([[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​Register-Variables|Register Variables]])
 +Registervariablen müssen immer im gleichen Register bleiben. ("​r2"​ => Registervariable vom Type 2 und nicht Register R2, Registernummer ist der letzte Parameter!)
 +
 +<​code>​
 +.stabs "​x:​r2;​-2147483648;​2147483647;",​N_RSYM,​0,​4,​2
 +</​code>​
 +
 +
 +=== Definition von Funktionen ===
 +
 +([[https://​www.sourceware.org/​gdb/​onlinedocs/​stabs.html#​Procedures|Procedures]]) N_LBRAC und N_RBRAC ist die Position der öffnenden/​schliessenden geschweiften Klammern der Funktion.
 +
 +<​code>​
 +.stabs "​ch::​ntb::​inf::​deep::​runtime::​mpc555::​Reset::​reset:​F1",​N_FUN,​0,​0,​reset
 +.stabn N_SLINE, 0, 37, reset
 +.stabn N_LBRAC, 0, 0, LM1
 +.stabn N_RBRAC, 0, 0, LM3
 +</​code>​
  
 ==== Debuggen mit GDB ==== ==== Debuggen mit GDB ====