2011-09-21 2 views
4

Mon problème est essentiellement que je m'attends à ce que Visual Studio (2010 Professional) puisse évaluer toute expression Visual C++ dans la fenêtre de surveillance qu'il gère dans le code que je débogue, mais apparemment, il y a quelque chose qui empêche cela. Par exemple, lors de l'utilisation de CStrings, l'évaluation de la méthode IsEmpty sur la CString dans la fenêtre de surveillance me donne une erreur Member function not found, de même qu'une comparaison d'égalité de base (dans le code débogué évidemment aucun problème). Est-ce que je manque quelque chose ici, ou est ce que je demande trop? Une solution évidente serait de mettre des instructions de débogage dans mon code pour n'importe quelle opération CString que je recherche, mais je préférerais ne pas avoir à le faire.Problèmes d'observation d'expressions non triviales dans le débogueur Visual Studio

Mise à jour/Exemple:

CString blah = _T("blah"); 

Appel blah.IsEmpty() dans mon code fonctionne très bien, mais dans la fenêtre montre du débogueur je reçois l'erreur ci-dessus (CXX0052). Le contenu de la variable blah peut être vu la fenêtre de la montre.

+0

Il échoue pour votre projet en cours ou pour tout projet que vous créez? Quelle version de VS avez-vous? Pouvez-vous créer un projet de démonstration pour reproduire le problème et publier un extrait de code ici qui vous donne le même avertissement? – higuaro

+0

Je travaille avec plusieurs projets MFC dans VS 2010 Professional (mis à jour ci-dessus). Juste créé un nouveau projet MFC (exemple de projet Microsoft) pour l'essayer aussi; même problème. Je vais ajouter un extrait. – newenglander

Répondre

6

Je pourrais reproduire votre problème, et, en effet, la fenêtre de surveillance VS montre Member function not found avec le code d'erreur CXX0052. enter image description here

En the MSDN documentation je trouve que ce problème se pose en raison d'un appel d'une fonction inline, la fonction membre CString::IsEmpty() est probablement inline en quelque sorte (c'est ce que l'évaluateur Watch Window voit), pour résoudre le problème, ouvrez d'abord votre projet de configuration et de désactiver inline

enter image description here

en second lieu, toujours dans le projet de configuration, choisissez Utiliser les MFC dans une bibliothèque statique (en quelque sorte la fenêtre de surveillance continuer à voir la fonction appelée comme un inline si vous l'utilisez comme bibliothèque partagée, peut-être parce que, dans la bibliothèque partagée, le code est en ligne et que l'évaluateur de la fenêtre de surveillance n'utilise pas les versions de débogage de ces bibliothèques d'exécution).

enter image description here

Troisièmement, propre et Reconstruire votre solution. Ensuite, le problème devrait être corrigé (n'oubliez pas d'actualiser l'expression si vous voyez la valeur grisée dans le panneau de la montre) pendant le débogage. N'oubliez pas de revenir à vos options de débogage d'origine ou mieux, créez un nouveau profil de débogage pour conserver ces paramètres.

enter image description here

+0

Merci pour la réponse détaillée, j'ai suivi vos étapes (a également dû ajouter '#define _AFXDLL' en raison des paramètres * Utiliser MFC dans une bibliothèque statique * et l'indicateur * Multithread DLL * (/ MD) requis par le projet), a pu compiler, relier et exécuter, mais a malheureusement eu le même problème que précédemment avec l'évaluateur de la fenêtre de surveillance. Je vais essayer à nouveau et/ou pour un autre projet. – newenglander

+0

J'ai essayé ceci avec un autre projet, les mêmes étapes, le même résultat.Les deux projets s'appuient sur d'autres DLL, et le second est également une DLL qui repose évidemment sur un autre fichier EXE à exécuter. Vous ne pensez pas que je dois également construire les autres DLL et l'EXE avec les paramètres modifiés, n'est-ce pas? J'étais en train de déboguer le binaire modifié et avait le point d'arrêt dans la base de code respective, donc cela ne devrait pas avoir d'importance. Mais je suppose que quelque chose à essayer néanmoins .... – newenglander

+0

@newenglander Pourriez-vous s'il vous plaît poster ce projet quelque part ?, donc je peux le télécharger et jouer avec la configuration pour repérer les paramètres manqués qui peuvent résoudre le problème. Bien sûr, il existe un autre ensemble d'options qui se débarrasser de l'avertissement 'CXX052' – higuaro

Questions connexes