Microsoft active par défaut Edit and Continue dans la RTM de Visual Studio 2015
Pour le développement de vos applications C++

Le , par Stéphane le calme

4PARTAGES

2  0 
Microsoft a annoncé la disponibilité de la fonctionnalité ‘Edit and Continue’ (EnC) qui sera activée par défaut dans la version RTM de Visual Studio 2015 pour le développement de vos applications en C++. Pour rappel, EnC vous permet d’effectuer des modifications dans votre code lorsque vous êtes arrêté dans le débogueur, et de voir ces changements être appliqués une fois que vous continuez l’exécution sans pour autant avoir besoin d’arrêter le débogueur, recompiler et exécuter l’application.

Notons que si vous avez mis à jour Visual Studio 2015 (par exemple si vous êtes passé de la version RC à la version RTM), cette fonctionnalité ne sera pas activée par défaut. Vous aurez alors quelques paramètres à vérifier afin que ce soit le cas :

  • Assurez-vous que le Debug Information Format soit réglé sur « Program Database for Edit and Continue (/ZI) » : si cette option n’est pas réglée correctement, le débogueur ne va pas prendre la modification en considération. Vous continuerez alors à modifier vos fichiers sans avoir activé la fonctionnalité EnC.


    Si vous effectuez une modification dans un binaire non compilé avec cette option, le débogueur va ignorer la modification et vous verrez un message d'erreur lorsque vous continuerez l’exécution vous indiquant que le fichier source a changé et qu'il ne correspond plus à la version du fichier utilisé pour construire l'application en cours de débogage.
  • Enable Incremental Linking doit être réglé sur « Yes (/INCREMENTAL) »


    Si cette fonctionnalité n’est pas paramétrée correctement et que vous essayez de faire une modification pendant le débogage, vous verrez un message d’erreur relative à Edit and Continue qui vous signalera l’échec d’une correspondance mémoire pour la modification sur le processus de débogage.
  • Enable Edit and Continue doit être activé dans Debug -> Options : si cette fonctionnalité doit être activée par défaut dans Virtual Studio 2015 RTM, il faudrait penser à vérifier tout de même dans le cas où Edit and Continue ne fonctionne pas.



Une fois que ces trois vérifications sont faites, vous devriez être en mesure d’utiliser Edit and Continue pour vos projets x86 ou x64. Microsoft donne quand même une série de limitations connues :

  • Édition des binaires compilés avec / bigobj (il est utilisé par exemple pour les applications de Windows Store) : si vous essayez de faire une modification dans un binaire compilé avec / bigobj vous recevrez un message d'erreur indiquant que « des modifications sont apportées qui ne peuvent pas être compilées » (la fenêtre d’erreur contiendra le message d'erreur « cl : Command line error D8016 : '/bigobj' and '/ZX' command-line options are incompatible »). Vous aurez alors la possibilité de revenir en arrière et modifier manuellement le fichier, ignorer ou avoir recourt à la fonction undo de Visual Studio pour toutes vos modifications. Microsoft envisage de corriger ce problème dans une prochaine mise à jour de Visual Studio 2015.
  • Édition des binaires liés avec l’information de débogage / DEBUG:FASTLINK : si vous essayez de faire une modification dans un binaire compilé avec cela, vous recevrez un message d'erreur vous indiquant qu’Edit and Continue n’est pas pris en charge pour ce binaire et qui vous proposera d’utiliser / DEBUG à la place. Microsoft envisage de corriger ce problème dans une prochaine mise à jour de Visual Studio 2015.
  • Les binaires supportent un nombre limité d’éditions : afin de supporter Edit and Continue, le compilateur réserve un espace vide dans le binaire qui met le code à jour lorsque des modifications sont apportées (c’est l'option / ZI qui demande au compilateur de le faire). Cela signifie qu'il est possible de remplir l'espace réservé après plusieurs modifications (l'espace utilisé par chaque modification dépendra de la portée et l'ampleur de l'édition, il n’est pas tributaire en réalité d’un nombre prédéterminé de modifications supportées). Si vous manquez d'espace de réserve dans le binaire, vous verrez un message d'erreur qui vous indiquera qu’il n’y a plus d’espace dans le module. Microsoft envisage d'ajouter la possibilité pour vous d'augmenter l'espace réservé si nécessaire dans une future mise à jour de Visual Studio 2015.
  • Edit and Continue n’est pas compatible avec le code optimisé, ne supporte pas l’ajout ou la modification de variables globales ou statiques ni l’édition de binaires liés à Safe Structured Exception Handlers (/SAFESEH).


Source : blog MSDN

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de JolyLoic
Rédacteur/Modérateur https://www.developpez.com
Le 06/04/2016 à 20:40
Le problèmes des PCH, c'est qu'ils ne sont pas composables. Tu ne peux pas dire je prend le PCH lié à la lib A, et celui de la lib B, et je les fait tourner ensemble. Tu es obligé de faire un PCH spécifique qui ne marche que quand tu utilises A puis B.

Donc les PCH sont spécifiques à chaque projet, et doivent être générés dans chaque cas. Et se pose la question de savoir ce qu'on met dedans, et ce qu'on garde sous forme de #include en dehors du PCH. Si on n'en met pas assez, on est trop lent, si on en met trop, à chaque compilation incrémentale, on va devoir re-générer l'ensemble du PCH et perdre du temps.

On peut voir les modules comme des PCH mais qui sont composables, et où tu aurais un PCH par header (ou groupe de headers étroitement liés). Tu as généré le code précompilé pour A, celui pour B, tu peux les utiliser séparément ou ensemble, dans l'ordre que tu veux. Du coup, quand tu livres ta bibliothèque, tu livres le précompilé avec qui peut directement être réutilisé. Jamais tu n'auras besoin de le code client de parser les headers de cette bibliothèque. Pourquoi peut-on faire ça avec les modules, mais pas avec les PCH ? Voir ma réponse à la seconde question.

isolation from macros = en quoi les macros posent pb ?
Ce sont elles qui empêchent toute composabilité. Quand tu inclues un .h dans ton code, la manière de l'interpréter dépend de l'ensemble des macros définies au moment où tu l'inclues. Qui n'a jamais eu sous windows un problème pour inclure un header d'une bibliothèque third party après un #include <windows.h> parce ce dernier définit une macro min... L'idée de base est qu'un module ne dépende pas des macros définies avant qu'il soit importé, et qu'en retour, il ne pollue pas l'environnement avec ses propres macros. Et là, la modularité commence à apparaître.
Je dis "l'idée de base" parce que certains aimeraient bien pouvoir dire que sélectivement, telle ou telle macro définie dans un module pourrait être visible de l'extérieur. C'est en discussion.

il y a plus de problemes non resolus que de REELS problemes resolus (pas de gestion de namespace donc conflits potentiels, pas de versioning, description des fonctions non lisibles dans les fichiers binaires de 'package').
Je ne pense pas qu'il s'agisse forcément de réels problèmes, mais d'une simple description de ce que les modules ne sont pas, pour éviter les confusions :

Namespaces : Certains langages (Java par exemple) lient structure physique du code (modules, fichiers source) et structure logique (namespaces, classes). D'autres ne le font pas (C# par exemple). La proposition de module pour le C++ choisi de ne pas le faire. Ce n'est en rien une limitation, mais un choix qui fait sens en C++ (sinon, comment ajouter une spécialisation de std::hash ?).
Versionning : On a déjà tous des outils pour gérer les versions, tu as parlé de nuget par exemple, je ne vois pas trop quel rôle les modules pourraient jouer là dedans, à part éventuellement en terme de réflexion, qui peut toujours s'ajouter.
Binary distribution : C'est un problème potentiel. Mais d'un autre côté, les autres langages ont bien réussi à résoudre ce problème. Quand on distribue une assembly .NET, c'est bien un binaire qu'on distribue, et ça fait déjà 15 ans que ça dure sans problèmes. Ce qui va être plus dur est d'avoir un format compatible entre différents vendeurs (Microsoft a proposé d'open-sourcer le sien, Clang a dit qu'il était hors de question qu'ils l'utilisent). Mais la situation ne sera pas pire que ce qu'elle est aujourd'hui : On risque de devoir quand même compiler une bibliothèque pour le compilo qu'on utilise, comme on le fait aujourd'hui. C'est juste qu'on risque aussi de ne pas avoir besoin de le faire, si le mainteneur de la bibliothèque nous fourni un module compilé pour notre compilateur, chose qui était très difficile avant, à cause des multiplicités de gestions de macros. Donc la situation ne devient pas parfaite, mais elle s'améliore quand même.

Et sinon, pour avoir expliqué à pas mal de débutants, oui, les #include, c'est compliqué. Et parfois même des professionnels aguerris galèrent pendant des heures pour faire un #include dans certains contextes...
3  0 
Avatar de Médinoc
Expert éminent sénior https://www.developpez.com
Le 30/07/2015 à 22:42
Donc en gros, Visual Studio supporte enfin le Edit-and-Continue en 64 bits?
2  0 
Avatar de The_badger_man
Rédacteur https://www.developpez.com
Le 25/09/2015 à 13:05
Systèmes d'exploitation pris en charge

Windows 8.1 (x86 et x64)
Windows 7 SP1 (x86 et x64)
Windows Server 2012 R2 (x64)
Windows Server 2012 (x64)
Windows Server 2008 R2 SP1 (x64)
Configuration matérielle

Processeur de 1,6 GHz ou plus rapide
1 Go de RAM (1,5 Go en cas d'exécution sur un ordinateur virtuel)
10 Go d'espace disque disponible
Lecteur de disque dur de 5 400 tours/min
Carte vidéo compatible DirectX 9 s'exécutant à une résolution d'affichage de 1024 x 768 ou supérieure
Autres éléments requis :

Sous Windows 8.1 et Windows Server 2012 R2, la mise à jour KB2883200 (disponible via Windows Update) est nécessaire
Internet Explorer 10
Pour le développement Windows Phone :
- Windows 8.1 (x64), édition professionnelle ou supérieure
- Émulateur Windows Phone
- Processeur prenant en charge SLAT (Second Level Address Translation)
2  0 
Avatar de The_badger_man
Rédacteur https://www.developpez.com
Le 02/12/2015 à 11:50
Citation Envoyé par MikeRowSoft Voir le message
Tiens tiens Update 1!?
Microsoft aurait-il réservé le service pack pour du support technique terminé?
Les services pack (correction de bugs) n'existent plus depuis Visual Studio 2010.

Depuis Visual Studio 2012, il s'agit de mises à jour fonctionnelles.
2  0 
Avatar de shkyo
Membre expérimenté https://www.developpez.com
Le 03/08/2015 à 9:31
Projet: je pense me lancer avec VS2015 dans le dév d'applis Windows Phone (disons plutôt Win10 maintenant...) avec un portage à court terme sur iOS...

Question bête: je fais du C#/XAML pour Windows puis je prends un abonnement Xamarin pour iOS, ou alors si je fais tout en C++ directement, je ne serais pas embêté au passage sur iOS???
1  0 
Avatar de Pol63
Expert éminent sénior https://www.developpez.com
Le 03/08/2015 à 10:04
le mieux est de tester quelques lignes de code et si ca fonctionne avant de choisir
le développement en c++ devrait être multiplateforme
quand à xamarin, c'est un framework à part (non vectoriel, donc je suppose que ce n'est pas du xaml, ou pas du xaml de wpf), rien à voir avec w10 unniversal app je pense, le projet xamarin pourra fonctionner sur différentes plateformes, seul le code non graphique devrait être portable d'un projet w10 à un projet xamarin
1  0 
Avatar de shkyo
Membre expérimenté https://www.developpez.com
Le 03/08/2015 à 10:17
Le problème technique c'est que pour tester la compil iOS, il faut absolument un Apple à ce que j'ai pu lire, ce qui n'est pas mon cas pour l'instant... Vu les prix de la pomme, je ne veux pas acheter du matos sans avoir déjà une appli qui tourne en Windows!

C'est pour ça que j'essaie de trouver des retours d'expérience de développement multi-plateforme avant d'investir...

EDIT: je viens de trouver cet article assez intéressant je trouve: http://blogs.msdn.com/b/emargraff/archive/2014/09/11/3-approches-pour-cr-233-er-son-application-mobile-sur-toutes-les-plateformes.aspx
il date de 2014, mais bon il résume bien la situation.
1  0 
Avatar de Pol63
Expert éminent sénior https://www.developpez.com
Le 03/08/2015 à 10:57
un vieux d'occas coute un peu moins cher ^^

sinon depuis il y aurait en plus le c++ de vs qui permet de faire du natif pour chaque plateforme
1  0 
Avatar de shkyo
Membre expérimenté https://www.developpez.com
Le 03/08/2015 à 11:13
Citation Envoyé par Pol63 Voir le message
un vieux d'occas coute un peu moins cher ^^

sinon depuis il y aurait en plus le c++ de vs qui permet de faire du natif pour chaque plateforme
C'est vrai qu'il y a de l'occaz, j'avais surtout regardé le Mac Mini, qui à mon avis suffit amplement (enfin j'espère...)

Quand au C++, ou le C# mon cœur balance!

En fait, ayant plus d'expérience en vb.net avec VS, je pense que j'irai plus vite en me mettant au C#, enfin c'est l'idée que je m'en fais d'après ce que j'ai pu voir de ce langage.

Et parce que je sais que le C++ n'est pas forcément évident au début, j'ai bien fait du C il y a pas mal de temps maintenant, mais je ne pense pas que ça m'aide beaucoup!
1  0 
Avatar de lauraJ
Candidat au Club https://www.developpez.com
Le 25/09/2015 à 9:35
Pouvez-vous m'indiquer quelle est la configuration minimale requise pour faire tourner Microsoft Visual Studio 2015 CTP 6 ?
Certaines machines ne redémarrent pas après activation de la fonction hyper-V sur un système pro.
Cela peut-il marcher sur un i3-4130 ? D'après ARK, la techno SLAT est présente. Les constructeurs ne garantissent pas le fonctionnement.

Cordialement
1  0 
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web