Procédure pas à pas : analyse du code C/C++ pour rechercher les erreurs
Cette procédure pas à pas montre comment analyser le code C/C++ à la recherche d'erreurs potentielles à l'aide de l'outil d'analyse du code C/C++.
Dans cette procédure pas à pas, vous parcourez le processus d'utilisation de l'analyse du code pour analyser votre code C/C++ à la recherche d'erreurs de code potentielles.
Vous effectuerez les tâches suivantes :
Exécuter l'analyse du code sur le code natif.
Analyser les avertissements d'erreur de code.
Traiter un avertissement comme une erreur.
Annoter le code source pour améliorer l'analyse des erreurs de code.
Composants requis
Visual Studio Premium ou Visual Studio Ultimate.
Copie de Exemple de démonstration.
Notions de base de C/C++.
Pour exécuter l'analyse des erreurs de code sur le code natif
Ouvrez la solution de démonstration dans Visual Studio.
La solution de démonstration apparaît à présent dans l'Explorateur de solutions.
Dans le menu Générer, cliquez sur Régénérer la solution.
La solution est générée sans aucune erreur, ni avertissement.
Dans l'Explorateur de solutions, sélectionnez le projet CodeDefects.
Dans le menu Projet, cliquez sur Propriétés.
La boîte de dialogue Pages de propriétés de CodeDefects s'affiche.
Cliquez sur Analyse du code.
Activez la case à cocher Activer l'analyse du code pour C/C++ sur la build.
Régénérez le projet CodeDefects.
Les avertissements d'analyse du code s'affichent dans la Liste d'erreurs.
Pour analyser les avertissements d'erreur de code
Dans le menu Affichage, cliquez sur Liste d'erreurs.
Selon le profil de développeur que vous avez choisi dans Visual Studio, vous devrez peut-être pointer sur Autres fenêtres dans le menu Affichage, puis cliquer sur Liste d'erreurs.
Dans la Liste d'erreurs, double-cliquez sur l'avertissement suivant :
avertissement C6230 : cast implicite entre types sémantiquement différents : utilisation de HRESULT dans un contexte Boolean.
L'éditeur de code affiche la ligne qui a provoqué l'avertissement dans la fonction bool ProcessDomain(). Cet avertissement indique qu'un HRESULT est utilisé dans une instruction 'if' où un résultat booléen est attendu.
Corrigez cet avertissement en utilisant la macro SUCCEEDED. Votre code doit ressembler au code suivant :
if (SUCCEEDED (ReadUserAccount()) )
Dans la Liste d'erreurs, double-cliquez sur l'avertissement suivant :
avertissement C6282 : Opérateur incorrect : assignation d'une constante dans un contexte de test. == est-il intentionnel ?
Corrigez cet avertissement en testant l'égalité. Votre code doit ressembler au code suivant :
if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != '\\'))
Pour traiter l'avertissement comme une erreur
Dans le fichier Bug.cpp, ajoutez l'instruction #pragma suivante au début du fichier pour traiter l'avertissement C6001 comme une erreur :
#pragma warning (error: 6001)
Régénérez le projet CodeDefects.
Dans la Liste d'erreurs, C6001 apparaît maintenant comme une erreur.
Corrigez les deux erreurs C6001 restantes dans Liste d'erreurs en initialisant i et j sur 0.
Régénérez le projet CodeDefects.
Le projet est généré sans avertissement ni erreur.
Pour corriger les avertissements d'annotation du code source dans annotation.c
Dans l'Explorateur de solutions, sélectionnez le projet Annotations.
Dans le menu Projet, cliquez sur Propriétés.
La boîte de dialogue Pages de propriétés de Annotations s'affiche.
Cliquez sur Analyse du code.
Activez la case à cocher Activer l'analyse du code pour C/C++ sur la build.
Régénérez le projet Annotations.
Dans la Liste d'erreurs, double-cliquez sur l'avertissement suivant :
avertissement C6011 : Suppression de la référence du pointeur NULL 'nouveauNœud'.
Cet avertissement indique que l'appelant n'a pas pu vérifier la valeur de retour. Dans ce cas, un appel à AllocateNode peut retourner une valeur NULL (consultez le fichier d'en-tête annotations.h pour lire la déclaration de fonction d'AllocateNode).
Ouvrez le fichier annotations.cpp.
Pour corriger cet avertissement, utilisez une instruction 'if' pour tester la valeur de retour. Votre code doit ressembler au code suivant :
if (NULL != newNode)
{
newNode->data = value;
newNode->next = 0;
node->next = newNode;
}
Régénérez le projet Annotations.
Le projet est généré sans avertissement ni erreur.
Pour utiliser l'annotation de code source
Annotez les paramètres formels et la valeur de retour de la fonction AddTail en utilisant les conditions Pre et Post comme dans cet exemple :
[returnvalue:SA_Post (Null=SA_Maybe)] LinkedList* AddTail
(
[SA_Pre(Null=SA_Maybe)] LinkedList* node,
int value
)
Régénérez le projet Annotations.
Dans la Liste d'erreurs, double-cliquez sur l'avertissement suivant :
avertissement C6011 : Suppression de la référence du pointeur NULL 'nœud'.
Cet avertissement indique que le nœud passé dans la fonction peut être null et indique le numéro de ligne auquel l'avertissement a été déclenché.
Pour corriger cet avertissement, utilisez une instruction 'if' pour tester la valeur de retour. Votre code doit ressembler au code suivant :
. . . LinkedList *newNode = NULL; if (NULL == node) { return NULL; . . . }
Régénérez le projet Annotations.
Le projet est généré sans avertissement ni erreur.
Voir aussi
Tâches
Procédure pas à pas : analyse du code managé pour les erreurs de code