Visual C++ à trouver la ligne qui provoque “Debug Assertion failed”

J'essaye de faire un programme en C++ qui fonctionne très bien lorsqu'il est compilé avec gcc pour fonctionner correctement sur Visual C++. Mon problème est que je suis maintenant le message d'erreur suivant:

Debug Assertion Failed!

Program: C:\WINDOWS\SYSTEM32\MSVCP110D.dll
File: c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector
Line: 1140

Expression: vector subscript out of range

Mon réel problème est que je ne sais pas où cela se produit. En appuyant sur pause dans la fenêtre d'erreur, je suis simplement pris de la part de la classe vector où l'exception qui s'est passé en fin de compte. Je veux trouver de la place dans mon application qui, en fait, il a causé. J'ai réussi à le réduire à ce bloc de code:

    for(unsigned int i=0;i<openPolygonList.size();i++)//error somewhere in here
    {
        if (openPolygonList[i].size() < 1) continue;
        for(unsigned int j=0;j<openPolygonList.size();j++)
        {
            if (openPolygonList[j].size() < 1) continue;

            Point diff = openPolygonList[i][openPolygonList[i].size()-1] - openPolygonList[j][0];
            int64_t distSquared = vSize2(diff);

            if (distSquared < 2 * 2)
            {
                if (i == j)
                {
                    polygonList.push_back(openPolygonList[i]);
                    openPolygonList.erase(openPolygonList.begin() + i);
                }else{
                    for(unsigned int n=0; n<openPolygonList[j].size(); n++)
                        openPolygonList[i].push_back(openPolygonList[j][n]);

                    openPolygonList[j].clear();
                }
            }
        }
    }

Le simple fait de placer des points d'arrêt à chaque ligne où un vecteur est utilisé n'est pas une option parce que itération de la boucle des milliers de fois et avoir à appuyer sur continuer à chaque fois va littéralement me prendre des heures. Est-il possible que je peux dire le débogueur de frein sur la ligne appropriée une fois que l'erreur se produit. Il peut m'aider à inspecter les variables et de déterminer quelle variable est hors de portée?

Vous devriez essayer d'utiliser la pile des appels. Regardez en haut de la première fonction que vous avez écrit.
Vous pouvez également indiquer à visual casser seulement après i > something par exemple. C'est un point d'arrêt avec une condition.
Désolé, je suis abit nouveau à VC++, pourriez vous juste m'expliquer comment cela devrait être fait?
Déboguer votre programme, et quand il les pauses, regardez la fenêtre qui est par défaut sur le coin inférieur droit de la fenêtre visuelle. Il doit avoir une "Pile d'Appel" de l'onglet. De l'ouvrir et de commencer par le haut (où vous devriez trouver une petite flèche), et la recherche de la première fonction que vous avez réellement écrit.
Vous cliquez droit sur votre point de rupture et que vous avez Condition et vous pouvez saisir ici une condition.

OriginalL'auteur Gerharddc | 2013-06-24