Le débogage de code C++ impliquant l'utilisation de: vecteur, string, STL
Je suis C++ débutant. Quand j'ai essayer de déboguer du code C++ à l'aide de constructions suivantes comme string, vector de certains types natifs, STL, etc, le débogage devient fastidieux. J'utilise MS Visual Studio 2010/Visual C++ 2010 Express.
par exemple
-- Lors de l'utilisation chaîne comme ci-dessous:
string str;
getline(cin, str);
for(i=0; i<str.size();i++)
Regarder la fenêtre n'affiche pas les valeurs pour les str[i]. Il dit surchargé l'opérateur n'a pas trouvé. J'ai manuellement l'effondrement de l'ensemble de la chaîne de la variable str et de voir le char elem à l'index, ce qui devient lourd.
-- Lors de l'utilisation de vecteurs ci-dessous, même problème. Si je mets la variable v1[k] dans la fenêtre espion même erreur.
vector<int> v1(100);
for(int k=0;k<100;k++)
{
v1.push_back(k);
}
, A tenté à l'aide de simples STL itérateurs comme elle.begin() , c'.fin() et les algorithmes comme sort(), reverse() , je ne pouvais pas débogage à l'intérieur de ces fonctions par pas à pas, ou ne pourrait pas définir un point de rupture dans ces.(Je sais qu'ils ont d'être à l'intérieur de la STL ou de certaines de ces bibliothèque standard, ils seraient assurés d'être exempt de bogues, mais on peut encore les utiliser correctement en passant quelque chose d'incorrect/incorrect)
Venant de C l'utilisation de la langue de nombreuses années, C++, je trouve ce manque de "debug" capacité , ou de certaines restrictions en ce que , douloureux, tandis que j'essaie de comprendre de gros morceaux de code C++ écrit par quelqu'un d'autre, au travail.
Mes questions -
Quels sont les moyens efficaces de débogage de code de travail pour comprendre ses fonctionnalités tout en utilisant les expressions idiomatiques comme dans l'étape, des points d'arrêt, regardez point, regarder windows. Est tout particulier débogueur mieux/pire que les autres.(Comme, disons, gdb étant préférable) ou avez-vous des astuces/conseils pour l'aide de débogage.
En général comment analyser un code C++ pour comprendre son fonctionnement?
- Je me demande ce qui est si hors-sujet que quelqu'un a voté pour fermer!
- J'ai voté pour fermer parce que demander "ce qui est efficace", "qu'est-ce débogueur est mieux/pire que l'autre", et, essentiellement, le reste de vos questions sont totalement subjectives.
- Les principales questions n'est pas que, si vous voyez.
- Quoi de mal à demander des moyens efficaces pour déboguer l'utilisation de la STL? C'est un très important (et objectif) question!
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez trouvé, essayez d'utiliser opérateurs surchargés dans la fenêtre watch ne fonctionnerait tout simplement pas. Vous avez besoin de briser les objets et tirez sur les variables de membre.
Dans MSVC,
std::vector
a une variable de membre_Myfirst
qui pointe vers le premier élément de sa mémoire tampon. Pour obtenir l'élément à l'indexi
vous pouvez ajouterÀ la fenêtre espion. Vous pouvez également utiliser
Pour afficher les 10 premiers éléments du tableau.
Il devrait y avoir un semblable variable membre pour
std::string
.vector
comme un tableau, il vous a couvert assez raisonnablement.((v)._Myfirst)[i]
devrait fonctionner pour tout cei
vous choisissez.Une très petite quantité de types de débogage "visualiseurs" spécifié pour eux pour aider au débogage. Ils sont en général une aide fantastique et je trouve qu'il est presque impossible d'obtenir quoi que ce soit fait sans eux maintenant (pourquoi dois-je me soucier de la mise en œuvre d'un vecteur.. je veux juste savoir ce qu'il contient!)
Si, toutefois, vous ne souhaitez désactiver, autour de google pour le "autoexp.dat fichier" qui contrôle qui. Vous pouvez simplement supprimer quelques lignes, et tout va revenir à la télévision types. Je vous préviens que des choses comme des cartes et des jeux de devenir essentiellement de l'onu-debuggable sans le visualisateur.
Sinon, passer en C++/CLI. VS2010 ne prend pas en charge debug visualisateur en C++/CLI, ce qui est généralement une énorme frustration, mais je suppose que peut-être ce que vous cherchez.
autoexp.dat
Dans Outils > Options.. > le Débogage > Général de décocher les éléments suivants:
Puis vous allez voir le résultat mis en forme.