Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
software:gdb:start [2016-02-17 12:40] abajricsoftware:gdb:start [2019-03-11 11:51] graf
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 143: Zeile 137:
  
 .stabs "void:t1=1",N_LSYM,0,0,0 .stabs "void:t1=1",N_LSYM,0,0,0
-.stabs "int:t2=r2;-2147483648;2147483647;",128,0,0,0+.stabs "int:t2=r2;-2147483648;2147483647;",N_LSYM,0,0,0
  
 .data .data
Zeile 276: Zeile 270:
  
  
 +==== Beschreibung der STABS ====
 +
 +Online Doku von GDB:
 +  * [[https://sourceware.org/gdb/current/onlinedocs/gdb/| GDB User Manual]]
 +  * [[https://www.sourceware.org/gdb/onlinedocs/stabs.html| STABS Doku]]
 +  * [[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]])
 +Type 1 = void und Type 2 = int.
 +
 +<code>
 +.stabs "void:t1=1",N_LSYM,0,0,0
 +.stabs "int:t2=r2;-2147483648;2147483647;",N_LSYM,0,0,0
 +</code>
 +
 +=== 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>
 +.data
 +.org 0x100000
 +.stabs "targetCommand:G2",N_GSYM,0,0,0
 +.global targetCommand
 +targetCommand:
 +.int 0
 +</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 ====
Zeile 339: Zeile 417:
 </code> </code>
  
 +Mit dem folgenden Befehl kann der Java-Sourcecode angezeigt werden:
 +
 +<code>
 +(gdb) list
 +</code>
 +
 +Mit dem folgenden Befehl wird eine Assembler-Instruktion ausgeführt:
 +
 +<code>
 +(gdb) stepi
 +</code>
 +
 +Mit dem folgenden Befehl wird Code ausgeführt, bis eine neue Source-Zeile erreicht wurde:
 +
 +<code>
 +(gdb) next
 +</code>
 +
 +Mit dem folgenden Befehl wird eine definierte Variable ausgegeben:
 +
 +<code>
 +(gdb) print x
 +</code>
 +
 +Mit dem folgenden Befehl wird eine definierte Variable geändert:
 +
 +<code>
 +(gdb) set var x = 12345
 +</code>
 +
 +Mit dem folgenden Befehl kann im Memory geschrieben werden:
 +
 +<code>
 +(gdb) set var *0x100000 = 12345
 +</code>