J'ai un programme en C qui fait des fautes après être descendu profondément dans un désordre récursif infini. Retracer le processus dans GDB est inutile car le cadre de la pile d'appels est au moins 1000 trames de profondeur, et les appels de fonction répétés sont des séries de quatre appels de fonction récursifs communs (les points d'arrêt semblent donc inutiles). Les appels répétés au backtrace ne font que lire les quatre noms de fonctions, encore et encore et encore. Il m'est venu à l'esprit que faire 'up' 'up' 'up'... me permettrait de remonter plus haut, afin de voir où ce modèle a commencé à se produire, mais il semble qu'il serait plus efficace de commencer à partir du cadre le plus haut de la pile d'appels et de 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 cadres au total, je sais que je pourrais simplement faire
gdb>> up N
pour atteindre le sommet 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 d'appel ? Ou bien, existe-t-il une commande intégrée à GDB pour sauter à la trame la plus haute ? Il m'est venu à l'esprit que la trame la plus haute devrait être la trame main() Puis-je tirer parti de cette connaissance pour atteindre le cadre le plus haut ?