Nous avons une grande application C++, que nous devons parfois exécuter en tant que build de débogage afin d'étudier les bogues. La version de débogage est beaucoup plus lente que la version finale, au point d'être presque inutilisable. Quelles sont les astuces disponibles pour rendre MSVC Les versions de débogage s'exécutent plus rapidement sans sacrifier trop au débugability?Comment faire pour que les versions de débogage de MSVC s'exécutent plus rapidement
Répondre
Utilisez #pragma optimize("", off)
en haut des fichiers sélectionnés que vous souhaitez déboguer dans la version. Cela donne une meilleure trace/variable de la pile.
Fonctionne bien si ce n'est que quelques fichiers dont vous avez besoin pour chasser le bogue.
C'est exactement l'astuce que nous avons découverte plus tard et que nous utilisons maintenant depuis un moment. (J'ai oublié de revenir et mettre à jour SO). La syntaxe correcte est '#pragma optimize (" ", off)', qui peut ensuite être suivie par '#pragma optimize (" ", on)' pour remettre le compilateur à la normale, permettant ainsi d'utiliser cette astuce sur fonctions uniques à la fois. – pauldoo
Merci d'avoir signalé l'erreur. Je l'ai mis à jour. – Macke
profil l'application et voir ce que ti prend le temps. vous devriez alors être en mesure de voir quel débogage doit être réglé.
Comment cela est-il fait? Et qu'est-ce que cela a à voir avec le fait de rendre les builds de débogage plus rapides? – Owl
Il existe plusieurs différences entre les versions de débogage et les versions de version qui influencent à la fois le débogage et la vitesse. Les plus importants sont les définitions _DEBUG/NDEBUG, les optimisations du compilateur et la création d'informations de débogage.
Vous pouvez créer une troisième configuration de solution et jouer avec ces paramètres. Par exemple, l'ajout d'informations de débogage à une version de release ne diminue pas vraiment les performances mais vous obtenez déjà une trace de pile sensible pour savoir dans quelle fonction vous vous trouvez. Seules les informations de ligne ne sont pas fiables à cause des optimisations du compilateur.
Si vous voulez des informations de ligne fiables, continuez et désactivez les optimisations. Cela ralentira un peu l'exécution mais cela sera toujours plus rapide que le débogage normal tant que la définition _DEBUG n'est pas encore définie. Ensuite, vous pouvez faire un bon débogage, seulement tout ce qui a "#ifdef _DEBUG" ou similaire autour de lui ne sera pas là (par exemple, les appels à affirmer etc.).
Hope this helps,
Jan
Pourquoi ne pas vous juste passer des informations de débogage dans la configuration de votre libération?
Les informations de débogage sont déjà activées dans la version. Le problème est que de nombreuses variables sont illisibles dans le débogueur en raison de l'optimisation agressive. – pauldoo
Quels VS utilisez-vous? Nous sommes passés de VS.net à VS2008 récemment et j'ai expérimenté la même lenteur lors du débogage sur une machine haut de gamme sur un projet LOC> 500k. Il s'avère que la base d'Intellisense s'est corrompue et se mettrait à jour constamment mais rester coincé quelque part. La suppression du fichier .ncb a résolu le problème.
Utilisez-vous MFC? Dans mon expérience, la principale chose qui peut rendre une version de débogage lente est les routines de validation de classe, qui sont généralement désactivées dans la version. Si la structure de données est semblable à celle d'un arbre, elle peut finir par re-valider des sous-arborescences des centaines de fois. Quoiqu'il en soit, si c'est, disons, 10 fois plus lent que la version finale, cela signifie qu'il passe 1/10 de son temps à faire ce qui est nécessaire, et 9/10 à faire autre chose. Si, pendant que vous l'attendez, vous cliquez simplement sur le bouton "pause" et regardez la pile des appels, il y a de fortes chances pour que vous voyiez exactement quel est le problème.
It's a quick & dirty, but effective way to find performance problems.
Nous avons tourné le débogage Iterator avec les symboles de préprocesseur:
_HAS_ITERATOR_DEBUGGING=0
_SCL_SECURE=0
Il a aidé un peu, mais était toujours pas aussi vite que nous le souhaiterions. Nous avons également fini par rendre notre version de débogage plus semblable à une version en définissant NDEBUG au lieu de _DEBUG. Il y avait quelques autres options que nous avons changées, mais je ne m'en souviens pas.
Il est regrettable que nous devions faire tout cela, mais notre application a un certain travail à faire toutes les 50ms ou c'est inutilisable.VS2008 hors de la boîte nous donnerait ~ 60ms fois pour le débogage et ~ 6ms fois pour la libération. Avec les réglages mentionnés ci-dessus, nous pourrions obtenir un débogage de ~ 20 ms environ, ce qui est au moins utilisable.
Laissez-le simplement fonctionner à fond (c'est-à-dire en continu, pas déclenché par minuterie). Ce débogage 10: 1: le ralentissement de la diffusion que vous voyez est juste le genre de chose qui est vraiment facile à trouver avec cette technique: http://stackoverflow.com/questions/375913/what-can-i-use-to -profile-c-code-in-linux/378024 # 378024 –
... même au ralentissement de 20: 6, cela signifie que 70% du temps est gaspillé. Donc, si vous prenez 10 échantillons, vous verrez la raison sur la pile sur 7 +/- 1,45 échantillons, et la pile vous dira pourquoi elle le fait, et ce sera une mauvaise raison, que vous pouvez trouver une solution de rechange . –
J'ai effectivement couru un profileur dessus. Le problème a été étendu à beaucoup de méthodes et il a semblé que les en-têtes de fonction mangeaient tout le temps pas le corps. J'ai conclu que c'était dû à des contrôles supplémentaires que Visual Studio faisait en mode debug. – MrSlippers
Créer une ReleaseWithSymbols configuration, qui définit NDEBUG et n'a pas permis Optimisations. Cela vous donnera de meilleures performances tout en conservant des symboles précis pour le débogage.
- 1. Comment faire fonctionner doxygen plus rapidement?
- 2. Comment démarrer Java3D plus rapidement?
- 3. Explication des symboles de débogage dans MSVC++ 6
- 4. Comment puis-je faire en sorte que JQueryUI puisse être trié plus rapidement?
- 5. Comment faire pour que MSBuild référence les bons assemblages?
- 6. Afficher les infobulles de l'onglet Firefox plus rapidement
- 7. Comment puis-je faire fonctionner le code jquery plus ancien avec les nouvelles versions de jquery?
- 8. Des procédures sont stockées plus rapidement pour les requêtes simples
- 9. Comment puis-je optimiser cette requête pour l'exécuter plus rapidement?
- 10. Comment faire en sorte que la fonction de recherche rapide de Mac OS X soit plus conviviale pour les programmeurs?
- 11. Comment faire pour exécuter jQuery selector plus rapidement ou l'exécuter en morceaux
- 12. Gestion/Utilisation de bibliothèques avec des versions de débogage et des versions de publication
- 13. Comment imprimer plus rapidement dans Excel VBA?
- 14. Comment déboguer les anciennes versions du logiciel?
- 15. Comment faire pour supprimer le code de débogage lors de la compilation en C++?
- 16. Xcode/Cocoa: Quelles sont les différences entre les versions de débogage et de version?
- 17. Comment est-ce que je peux faire imageboxe sur le formulaire plus rapidement sur l'exécution dans des Winforms .net?
- 18. Quelles versions de Windows sont actuellement les plus populaires?
- 19. Les valeurs flottantes se comportent différemment entre les versions de version et de débogage
- 20. Comment utiliser les intrinsèques MSVC pour obtenir l'équivalent de ce code GCC?
- 21. Compresser la page pour la charger plus rapidement
- 22. SMS d'alerte pour répondre aux situations d'erreur plus rapidement
- 23. Comment créer une requête GROUP BY SUBSTRING plus rapidement?
- 24. Que mettre dans l'en-tête précompilé? (MSVC)
- 25. WPF: Manière plus efficace d'afficher des images qui changent rapidement?
- 26. Variable CMake ou propriété à discerner entre les versions de débogage et de publication
- 27. Comment faire en sorte que Maven expire plus tôt pendant le téléchargement des dépendances?
- 28. Affichage de grandes images par DirectX plus rapidement?
- 29. Jquery image preloader (comment faire pour que le chargement.gif apparaisse plus vite)
- 30. Comment exécuter les bibliothèques partagées de débogage?
pourquoi est-ce un wiki communautaire? – Aamir
On m'a déjà dit de faire toutes les questions "wiki communautaire". Je ne sais pas vraiment ce que l'option fait. – pauldoo
............ lol – demoncodemonkey