J'ai un programme C qui sépare les défauts après être descendu profondément dans un désordre récursif infini. Le retour en arrière du processus dans GDB est inutile car la trame de pile d'appels a une profondeur d' au moins 1000 trames, et les appels de fonction répétés sont une série de quatre appels de fonction récursifs communs (donc les points d'arrêt semblent inutiles). Les appels répétés de backtrace ne font que lire les quatre noms de fonction, encore et encore et encore. Il m'est venu à l'esprit que faire 'up' 'up' 'up' ... me ferait monter plus haut, donc je pourrais voir où ce modèle a commencé à se produire, mais il semble qu'il serait plus efficace de commencer à partir de l'appel le plus haut empiler le cadre et descendre à la place, car mon intuition est que la récursion infinie commence tôt dans le processus. Si la pile d'appels avait N trames au total, je sais que je pourrais simplement faire
gdb>> up N
pour arriver en haut de la pile (la Nième trame), mais le problème est que je ne connais pas N. Existe-t-il une commande pour trouver le nombre total de trames dans la pile des appels? Ou, y a-t-il une commande GDB intégrée lisse pour sauter au cadre le plus haut? Il m'est venu à l'esprit que le cadre supérieur devrait être la fonction main () - puis-je tirer parti de ces connaissances pour atteindre le cadre supérieur?
Vous pouvez spécifier 'bt' avec un nombre négatif pour commencer à partir du cadre le plus haut:
Vous pouvez ensuite utiliser le «cadre» (ou «f») pour accéder directement au cadre que vous souhaitez.
la source
fr 0
vous amènera au cadre de pile le plus haut.fr
signifie cadre.la source