CodeAnalysis Validator est un logiciel d’analyse, de vérification de code source pour des projets écrits dans les langages C ou C++. Mais ce n’est pas tout, CodeAnalysis Validator est aussi un puissant débogueur qui permet de repérer des erreurs difficiles en un clin d’œil. A l’heure où les langages C/C++ restent omniprésents dans la plupart des systèmes informatiques, ces langages sont encore très souvent étudiés car ils offrent une bonne approche de la programmation séquentielle et de la manipulation de la mémoire. Cependant, il est parfois très difficile de détecter des erreurs d’inattention, des erreurs de logique ou pire encore des erreurs d’exécution.
L’outil Validator peut être utilisé à but pédagogique pour aider des apprentis codeur à ne pas tomber dans les pièges de la programmation, dans les entreprises pour aider à la compréhension d’un projet complexe, voire comme correcteur automatique d’exercices de programmation.
Principales fonctionnalités
- Prise en charge de librairies externes
- Scan et analyse de la mémoire (pendant l’exécution du programme)
- Analyse des fonctions (pendant l’exécution du programme)
- Génération du graphe d’appel de l’application (pendant l’exécution du programme)
- Analyse statique des fichiers sources
- Détection des fonctions orphelines
- …
Fonctionnalités détaillées
Validator effectue deux analyses consécutives du programme. La première consiste à compiler le projet et à l’exécuter normalement. A la fin du programme (provoqué soit par un utilisateur, soit sans présence humaine dans le cas où le programme est autonome), les données sont analysées permettant ainsi :
- de calculer le temps d’exécution de chaque fonction afin de détecter d’éventuels goulots d’étranglement (fonctions qui prennent trop de temps à s’exécuter)
- de vérifier les fuites de mémoire qui peuvent se révéler traitres et surtout dangereuses pour le programme (surtout dans le monde des systèmes embarqués) et conduire à un plantage de l’application…
- de vérifier les erreurs en mémoire, très dangereuses pour toute application qui se respecte
- de vérifier toutes les allocations/désallocation de variables, ouvertures/fermetures de ressources
- de générer le graphe d’appel (graphique montrant comment les fonctions s’appellent les unes des autres) dynamique de l’application permettant ainsi de mieux comprendre un projet complexe
La deuxième analyse est indépendante de l’exécution du programme. Il s’agit d’une analyse statique des fichiers sources. Cette analyse permet de détecter notamment des incohérences dans le code source, des normes non respectées, d’éventuelles erreurs de logique (pour rappel, les compilateurs ne détectent que les erreurs de syntaxe). Les données ainsi récoltées par cette analyse permettent :
- de détecter des fichiers orphelins
- d’en déduire l’architecture de l’application permettant aussi de mieux comprendre un projet complexe
- de détecter les « nombres magiques » (ce sont des nombres écrits en dur dans le code source qui doivent être remplacés par des constantes)
- de détecter les variables globales et statiques
- de générer un graphe d’appel statique du programme. En comparant avec le graphe d’appel dynamique, on peut en déduire les fonctions orphelines (fonctions jamais appelées)
- …
En cas de plantage de l’application, Validator est capable de remonter la pile d’appel des fonctions pour cibler à la ligne près l’instruction fatale qui à déclencher le plantage. Ce mécanisme est visible aussi sur le graphe d’appel dynamique.