web-dev-qa-db-fra.com

Comment déboguer en mode release?

Je dois déboguer un projet c ++, mais comme une dépendance ne se compile pas en mode débogage et que je n'ai pas pu résoudre ce problème jusqu'à présent, j'aimerais essayer de déboguer le projet en mode release.

Actuellement, l'application se bloque en raison d'un pointeur nul, mais je n'ai pas le code à l'origine de l'erreur. Comme les points d'arrêt sont apparemment ignorés en mode release, j'aimerais savoir quelle est la meilleure façon de trouver l'erreur.

32
Pedro

Dans VS, faites un clic droit sur votre projet, choisissez "Propriétés".

  1. Cliquez sur le nœud C/C++. Définissez le format des informations de débogage sur C7 compatible (/ Z7) ou sur la base de données de programme (/ Zi).

  2. Développez l'éditeur de liens et cliquez sur le nœud Général. Définissez Activer la liaison incrémentielle sur Non (/ INCREMENTAL: NO).

  3. Sélectionnez le nœud de débogage. Définissez Générer les informations de débogage sur Oui (/ DEBUG).

  4. Sélectionnez le nœud d'optimisation. Définissez les références sur Oui (/ OPT: REF).

    si/OPT: REF est spécifié,/OPT: ICF est activé par défaut.

C'est extrait directement de la documentation de Microsoft:

Je le fais tout le temps et je ne débogue plus pratiquement jamais en mode débogage. Comme vous le savez, de nombreuses erreurs qui se produisent dans une version de version peuvent ne pas se produire dans une version de débogage (presque certainement les erreurs qui surviennent en invoquant UB).

De plus, je travaille sur un projet qui utilise une tonne de traitement d'image et effectue beaucoup de compression/décompression de grandes images. L'utilisation d'une construction de débogage lent n'est tout simplement pas pratique.

62
Ed S.

Vous ne pouvez pas toujours simplement modifier les paramètres du projet et recompiler.
Parfois, vous avez une version publiée que vous souhaitez déboguer, ou un fichier de vidage envoyé par un client.

Lors de la compilation d'un projet C++ en version avec optimisations, le débogueur n'affiche parfois pas les bonnes informations d'objet.

Les variables locales sont généralement les premières à disparaître, et plusieurs fois, les informations de cet objet sont perdues pour le débogueur.

La raison en est que le compilateur utilise les registres matériels disponibles pour contenir les informations et utilise des optimisations pour éviter l'allocation de variables locales.

J'ai suggéré un moyen de trouver les informations manquantes ici:

Débogage des projets de versions en C++ - Recherche des informations sur les objets perdus

6
Yochai Timmer