Y a-t-il un moyen de surveiller la taille de la pile d'appel dans Visual Studio? Une fenêtre de pile d'appels est fournie lors de l'exécution mais ne montre pas la taille de la pile. J'utilise le problème de dépassement de pile C ++ et faisant face à la pile. Je sais que quelque chose pourrait être faux de certaines fonctions récursives que j'utilise, mais avant de résoudre ces problèmes, je voudrais surveiller la taille de la pile d'appel pour voir ce qui se passe. P>
3 Réponses :
Il y a quelques façons: p>
@esp code> dans la fenêtre de surveillance. Comparez ceci à quoi ESP a été au début du processus. Li>
- De même, examinez l'adresse des variables allouées de pile dans les premiers / derniers cadres de pile. Li>
ol>
Notez que la pile est généralement allouée à l'envers, de sorte que la pile se développe, ESP devient plus petite et plus petite. P>
Notez que pour Windows Cela ne semble pas fonctionner (voir: Stackoverflow.com/Questtions/7490095/... )
L'utilisation d'un point d'arrêt de données peut être utile ici. Où que vous soyez dans le code, cela n'a pas d'importance tant que vous êtes sur le thread de droite, utilisez DEBUG + Nouveau point d'arrêt + nouveau point d'arrêt de données. Dans le type d'adresse type @esp - 250000 code>. Appuyez sur F5 pour continuer à courir et il se cassera quelque part à l'intérieur de la récursivité lorsque le quart de l'espace de pile disponible a été consommé. Le décalage exact d'ESP n'est pas critique. P>
@esp - 250000 garantit-il toujours la consommation du quart de l'espace de pile disponible ?. Je veux dire que mon réglage peut avoir une taille de pile différente. Alors, aurait-il le même travail à ma fin aussi? Y a-t-il un endroit pour rechercher cette information?
Sur une machine 64 bits, le registre s'appelle RER code>.
L'analyse de code "Règles natives recommandées par Microsoft" peut regarder votre code et trouver des problèmes avec votre code qui pourrait déborder de votre pile. Je ne sais pas à quel point il est bon de trouver un problème de récursivité, mais il a trouvé un problème dans mon code où j'ai utilisé une instance locale d'une classe très grande (1 Mo). Au moment de l'exécution, la seule erreur était un débordement de pile. C'est une mauvaise idée d'utiliser de grands objets sur la pile bien sûr; Vous ne devez utiliser que de petits objets et objets qui stockent la plupart de leur linge sale sur le tas. P>
en VS2012, cliquez avec le bouton droit de la souris sur le projet Propriétés em> et sélectionnez Analyse de code em>, puis cliquez sur la case à cocher sur Activer l'analyse de code em>. Il faut quelques minutes à courir. P>