Partager via


Modifications de code prises en charge (C++)

Modifier et continuer pour les projets C++ gère la plupart des types de modifications de code. Toutefois, certaines modifications ne peuvent pas être appliquées pendant l’exécution du programme. Pour appliquer ces modifications, vous devez arrêter l’exécution et générer une nouvelle version du code.

Consultez Modifier et continuer (C++) pour plus d’informations sur l’utilisation de Edit and Continue pour C++ dans Visual Studio.

Spécifications

Paramètres de génération (Propriétés du projet > )

  • C/C++ > Format général > des informations de débogage : Base de données de programme pour modifier et continuer (/ZI)

  • Éditeur de liens > Général > Activer la liaison incrémentielle : Oui (/INCREMENTAL)

    Tous les paramètres d’éditeur de liens incompatibles (tels que /SAFESEH, ou /OPT:...) peuvent provoquer l’avertissement LNK4075 pendant la génération. Exemple : LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Paramètres du débogueur (Options de débogage > )

Ouvrez le volet Debug (ou Outils), >Options, puis développez la section Tous les paramètres>Débogage>, Rechargement à chaud .NET/C++.

Ouvrez la boîte de dialogue Débogage (ou Outils) >Options, et développez la section Débogage>.NET/C++ Rechargement à chaud.

Sélectionnez une ou toutes les options suivantes pour activer la fonctionnalité :

  • Activer le rechargement à chaud : active le rechargement à chaud au démarrage du débogueur attaché (F5).

  • Activer le rechargement à chaud lors du démarrage sans débogage : active le rechargement à chaud lors du démarrage sans le débogueur attaché (Ctrl + F5).

  • Activer le rechargement à chaud sur l’enregistrement de fichier : active le rechargement à chaud lorsque le fichier est enregistré.

  • Niveau de verbosité de la journalisation : définissez le niveau de journalisation lorsque le rechargement à chaud est activé. Choisissez parmi Minimal (par défaut), Détaillé ou Diagnostic.

La modification de ces paramètres affecte tous les projets sur lesquelles vous travaillez. Vous n’avez pas besoin de reconstruire votre application après avoir modifié un paramètre. Si vous générez votre application à partir de la ligne de commande ou d’un makefile, mais que vous déboguez dans l’environnement Visual Studio, vous pouvez toujours utiliser Modifier et Continuer si vous définissez l’option /ZI .

Modifications non prises en charge

Les modifications C/C++ suivantes ne peuvent pas être appliquées pendant une session de débogage. Si vous apportez l’une de ces modifications, puis essayez d’appliquer des modifications de code, un message d’erreur ou d’avertissement s’affiche dans la fenêtre Sortie .

  • La plupart des modifications apportées aux données globales ou statiques.

  • Modifications apportées aux exécutables copiés à partir d’un autre ordinateur et non générés localement.

  • Modifications apportées à un type de données qui affectent la disposition d’un objet, telles que les membres de données d’une classe.

  • Ajout de plus de 64 000 octets de nouveau code ou de données.

  • Ajout de variables qui nécessitent un constructeur à un point avant le pointeur d’instruction.

  • Modifications qui affectent le code qui nécessite l’initialisation au moment de l’exécution.

  • Ajout de gestionnaires d’exceptions, dans certains cas.

  • Modifications apportées aux fichiers de ressources.

  • Modifications apportées au code dans les fichiers en lecture seule.

  • Modifications apportées au code sans fichier PDB correspondant.

  • Modifications apportées au code qui n’a aucun fichier objet.

  • Modification des lambdas dans les scénarios suivants :

    • Lorsque les lambda ont un membre statique ou global.
    • Lorsque vous passez des lambdas à un std::function. Cette méthode provoque une véritable violation ODR et entraîne l’erreur C1092.
  • Modifier et continuer ne met pas à jour les bibliothèques statiques. Si vous apportez une modification dans une bibliothèque statique, l’exécution continue avec l’ancienne version et aucun avertissement n’est émis.

Scénarios non pris en charge

Modifier et continuer pour C/C++ n’est pas disponible dans les scénarios de débogage suivants :

  • Débogage d’applications natives compilées avec /Zo (débogage optimisé amélioré)

  • Projets qui utilisent l’ensemble d’outils MSVC v120 et le commutateur C/C++ /bigobj . Modifier et continuer avec /bigobj n’est pris en charge que dans les outils de génération MSVC v140 et les versions ultérieures.

  • Débogage en mode mixte (natif/géré).

  • Débogage JavaScript.

  • Débogage SQL.

  • Débogage d’un fichier de vidage.

  • Modification du code après une exception non gérée, lorsque l’option Annuler le déroulement de la pile des appels sur les exceptions non gérées n’est pas sélectionnée.

  • Déboguer une application en utilisant Attacher à plutôt que de lancer l'application en choisissant Démarrer dans le menu Débogage.

  • Débogage du code optimisé.

  • Le débogage d'une ancienne version de votre code après l'échec de la compilation d'une nouvelle version en raison d'erreurs de compilation.

  • Utilisation d’un chemin d’accès du compilateur personnalisé (cl.exe). Pour des raisons de sécurité, pour la recompilation d’un fichier pendant l’édition et la poursuite, Visual Studio utilise toujours le compilateur installé. Si vous utilisez un chemin d’accès du compilateur personnalisé (par exemple, via une variable personnalisée $(ExecutablePath) dans votre *.props fichier), un avertissement s’affiche et Visual Studio revient à utiliser le compilateur installé de la même version/architecture.

  • Architectures héritées/ensembles d’outils MSVC. Avec l’ensemble d’outils MSVC v140, le débogueur par défaut prend en charge Edit et Continuer avec les applications X86 et X64. Les ensembles d’outils hérités prennent uniquement en charge les applications X86. Les ensembles d’outils antérieurs à MSVC v120 doivent utiliser le débogueur hérité en vérifiant « Options de débogage >> générales > utiliser le mode de compatibilité native » afin d’utiliser Modifier et Continuer.

Limitations de l’attribut IDL

Modifier et continuer ne régénère pas les fichiers IDL (Interface Definition Language). Par conséquent, les modifications apportées aux attributs IDL ne sont pas reflétées pendant le débogage. Pour voir le résultat des modifications apportées aux attributs IDL, vous devez arrêter le débogage et reconstruire votre application. Modifier et Continuer ne génère pas d’erreur ou d’avertissement si les attributs IDL ont changé. Pour plus d’informations, consultez Attributs IDL.

Problèmes de diagnostic

Si votre scénario ne correspond à aucune des conditions mentionnées ci-dessus, vous pouvez collecter des détails supplémentaires en définissant la valeur de Registre DWORD suivante :

  1. Ouvrez une invite de commandes de développeur.

  2. Exécutez la commande suivante:

    VsRegEdit.exe set “C:\Program Files\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1

Si vous définissez cette valeur au début d’une session de débogage, les différents composants de Edit and Continue produisent des journaux détaillés dans le volet Output Window>Debug.