Sie können 'bt' mit einer negativen Zahl angeben, um vom obersten Frame zu beginnen:
BT -20
Sie können dann mit "frame" (oder "f") direkt zum gewünschten Frame gehen.
Ich habe ein C-Programm, das Fehler ausgleicht, nachdem es tief in ein unendliches rekursives Durcheinander gesunken ist. Das Zurückverfolgen des Prozesses in GDB ist unbrauchbar, da der Aufruf-Stack-Frame mindestens 1000 Frames tief ist und die wiederholten Funktionsaufrufe eine Serie von vier üblichen rekursiven Funktionsaufrufen sind (Haltepunkte scheinen also nutzlos). Wiederholte Aufrufe des Backtraces lesen die vier Funktionsnamen immer wieder aus. Mir kam es so vor, als würde "Up" "Up" "Up" "höher" werden, so dass ich sehen konnte, wo dieses Muster zum ersten Mal auftrat, aber es scheint effizienter zu sein, vom obersten Anruf zu beginnen Stapeln Sie Frame und treten Sie stattdessen zurück, weil ich glaube, dass die unendliche Rekursion früh im Prozess beginnt. Wenn der Aufrufstack insgesamt N Frames hätte, könnte ich das einfach tun
gdb>> up N
an den Anfang des Stapels zu gelangen (der N-te Frame), aber das Problem ist, dass ich N nicht kenne. Gibt es einen Befehl zum Ermitteln der Gesamtzahl der Frames im Aufrufstapel? Oder gibt es einen glatten integrierten GDB-Befehl, um zum obersten Frame zu springen? Ich kam mir vor, dass der oberste Frame die main () - Funktion sein sollte - kann ich dieses Wissen nutzen, um zum obersten Frame zu gelangen?
Sie können 'bt' mit einer negativen Zahl angeben, um vom obersten Frame zu beginnen:
BT -20
Sie können dann mit "frame" (oder "f") direkt zum gewünschten Frame gehen.
In meinen Tests führte die Verwendung von 'up' mit einer sehr großen Anzahl dazu, dass der oberste Frame angezeigt wird, z
(gdb) up 99999 #58 0x0000000000442fb4 in main ()
fr 0
bringt Sie zum obersten Stapelrahmen. fr
steht für Rahmen.