1

Lorsque j'effectue une étape unique avec le débogueur Visual Studio via le programme suivant, aucune valeur de retour n'est affichée dans la fenêtre "auto" pour l'un des appels de méthode istringstream.Le débogueur Visual C++ n'affiche pas la valeur de retour

Il indique cependant la valeur de retour pour vector::size().

#include "stdafx.h" 
#include <sstream> 
#include <vector> 

int main() 
{ 
    std::vector<char>{}.size();  //<-- debugger shows return value 
    std::istringstream{"x"}.get(); //<-- no return value shown 
    std::istringstream{"x"}.good(); //<-- no return value shown 
    std::istringstream{"x"}.tellg(); //<-- no return value shown 
    return 0; 
} 

Bien sûr, je tourner ceci dans la configuration « debug », de sorte que le compilateur ne devrait pas être en mesure d'optimiser les appels loin. J'ai créé le projet à l'aide de l'assistant d'application console sans modifier les paramètres du projet par la suite.

Devrais-je signaler un problème?

Edit:

Une autre question peut-être liée: Je ne peux pas F11 -Step dans l'une des istringstream méthodes ci-dessus. Le débogueur les franchit comme si j'avais appuyé sur F10. Encore une fois, cela fonctionne pour vector::size().

+0

Cela ressemble plus à un rapport de bogue de Visual Studio qu'à un problème de code approprié. – TankorSmash

+1

Je reçois des valeurs de retour pour tous ces appels dans la fenêtre "Autos". Oui, VS2017. – AnT

+1

@Tankor SO n'est pas seulement pour les problèmes de code, il est également valable pour [poser des questions sur les outils de codage] (http://stackoverflow.com/help/on-topic). Je ne suis pas encore sûr si c'est un bug ou si c'est un problème de configuration. J'aimerais que certaines personnes le confirment d'abord. – zett42

Répondre

0

Il s'est avéré que c'était un problème de symboles de débogage manquants lors de la liaison dynamique à l'exécution VC++. Après une installation par défaut de Visual Studio 2017, par exemple, les symboles de débogage pour l'environnement d'exécution VC++ ne sont pas disponibles.

solutions possibles:

  • lien statiquement au VC++ Runtime (propriétés du projet> C/C++> Génération de code> Runtime Library: multithread-Debug)
  • activer le serveur de symboles Microsoft (Extras> Options >> symboles Debugging> Vérifier « serveur de symboles Microsoft » et entrez le répertoire pour le stockage des symboles dans le contrôle d'édition ci-dessous)

Je pense que la question ne se produit pas pour std::vector car il est uniquement en-tête, de sorte que le code est directement lié dans le programme exécutable. Pour la bibliothèque de flux C++, une grande partie du code se trouve réellement dans une DLL d'exécution VC.

+0

Heureux de savoir que ce problème a été résolu, vous pouvez le marquer comme la réponse. Merci pour votre partage. –

+0

@Jack Je dois encore attendre 14h avant de pouvoir accepter ma propre réponse. – zett42