CodeChecker est une infrastructure d'analyse statique construite sur la chaîne d'outils de l'analyseur statique LLVM / Clang, remplaçant scan-build dans un environnement de développement Linux ou MacOS (OS X).

Consultez notre démo montrant quelques résultats d'analyse des projets open source!
Exécute Clang-Tidy , Clang Static Analyzer avec analyse d'unité transversale, analyse statistique (lorsque les vérificateurs sont disponibles), CPPCHECK , GCC STATIC Analyzer et l' analyseur Facebook Infer .
Crée la base de données de compilation JSON en écoutant tout processus de build (par exemple, CodeChecker log -b "make" ).
Analyse automatiquement les projets de compilation inter-compilés GCC: détection de la configuration du compilateur GCC ou Clang et formant les invocations de l'analyseur de Clang correspondantes.
Analyse incrémentielle: seuls les fichiers modifiés et ses dépendances doivent être réanalysés.
Suppression fausse positive avec la possibilité d'ajouter des commentaires de révision.
Visualisation du résultat dans la ligne de commande ou dans le HTML statique.
Vous pouvez stocker et visualiser des milliers de rapports d'analyse de nombreux analyseurs comme Clang Static Analyzer (C / C ++), Clang Tidy (C / C ++), Facebook inférieur (C / C ++, Java), Clang Sanitisers (C / C ++), Spotbugs (Java), Pylint (Python), Eslint (Javascript) ...
Pour une liste complète, voir Analyseurs pris en charge
Application Web pour la visualisation des défauts de code découverts avec une expérience rationalisée et facile (avec PostgreSQL ou backend SQLite).
L'intégration de Gerrit et Gitlab montre des résultats d'analyse comme les revues Gitlab ou Gerrit.
Nom de vérificateur filtrable (nom de vérificateur de défaut, gravité, chemins source, ...) et comparable (calcule la différence entre deux analyses du projet, montrant quels bogues ont été corrigés et lesquels sont récemment introduits) Résultat.
Mode DIFF: Cela montre la liste des bogues qui ont été introduits depuis votre dernière exécution d'analyseur.
Les résultats peuvent être partagés avec d'autres développeurs, le système de commentaires et d'examen aide la communication des défauts de code.
Communication de serveurs de serveurs de friperie facilement implémentable utilisée pour stocker et interroger les défauts découverts.
Prise en charge de plusieurs fronts de visualisation de bogues, tels que l'application Web, un outil de ligne de commande et un plugin Eclipse.
La commande CodeChecker propose de nombreuses sous-commandes qui peuvent être utilisées par exemple pour enregistrer et analyser vos projets, imprimer les résultats ou démarrer un serveur Web. Pour la liste complète, consultez le tableau suivant ou vérifiez le message d'aide de cette commande ( CodeChecker --help ):
CodeChecker Sous-commande | Description |
|---|---|
analyze | Exécutez les analyseurs de code pris en charge pour les fichiers enregistrés dans une base de données de compilation JSON. |
analyzer-version | Imprimez la version du package CodeChecker Analyzer utilisé. |
analyzers | Liste des analyseurs pris en charge et disponibles. |
check | Effectuez une analyse sur un projet et imprimez les résultats à la sortie standard. |
checkers | Énumérez les vérificateurs disponibles pour l'analyse du code. |
cmd | Voir les résultats de l'analyse sur un serveur en cours d'exécution à partir de la ligne de commande. |
fixit | Appliquez des correctifs automatiques en fonction des suggestions des analyseurs. |
log | Exécutez une commande build, collectez les commandes de compilation exécutées et stockez-les dans un fichier JSON. |
parse | Résumé de l'analyse d'impression et se traduit par un format lisible par l'homme. |
server | Démarrez et gérez le serveur Web CodeChecker. |
store | Enregistrer les résultats de l'analyse dans une base de données. |
version | Imprimez la version du package CodeChecker utilisé. |
web-version | Imprimez la version du package CodeChecker Server utilisé. |
CodeChecker cmd Sous-Command possède également de nombreuses autres sous-commandes qui peuvent être utilisées pour obtenir des données (produits, exécutions, résultats, statistiques) à partir d'un serveur CodeChecker en cours d'exécution. Pour la liste complète, consultez le tableau suivant ou vérifiez le message d'aide de cette sous-commande ( CodeChecker cmd --help ):
CodeChecker cmd sous-commande | Description |
|---|---|
runs | Répertoriez l'analyse disponible des exécutions. |
history | Montre de l'historique de plusieurs courses. |
results | Résumé du résultat de l'analyse de la liste (Résultat) pour une exécution donnée. |
diff | Comparez deux exécutions d'analyse et montrez la différence. |
sum | Afficher les statistiques des vérificateurs. |
token | Accès aux sous-commandes liées à la configuration des jetons d'accès personnels gérés par un serveur CodeChecker. |
del | Supprimer l'analyse des exécutions. |
update | Mettez à jour une analyse d'analyse. |
suppress | Gérer et importer des suppressions de rapports sur un serveur CodeChecker. |
products | Accédez aux sous-commandes liées à la configuration des produits gérés par un serveur CodeChecker. |
components | Accédez aux sous-commandes liées à la configuration des composants source gérés par un serveur CodeChecker. |
login | S'authentifiez dans les serveurs CodeChecker qui nécessitent des privilèges. |
export | Exporter les commentaires et les statuts de révision de CodeChecker. |
import | Importez des commentaires et révisez les statuts dans CodeChecker. |

Étape 1 : CodeChecker log exécute la commande de construction donnée et enregistre les étapes de compilation exécutées. Ces étapes sont écrites dans un fichier de sortie (base de données de compilation) dans un format JSON.
Étape 2 : CodeChecker analyze utilise la base de données de compilation JSON créée précédemment pour effectuer une analyse sur le projet, la sortie de l'analyse entraîne un format lisible par machine (PLIST).
Étape 3 : Dans cette étape, vous pouvez faire plusieurs choses:
Parse et assez imprimé le résumé et les résultats des fichiers de résultats d'analyse ( CodeChecker parse ).
Stockez les résultats sur un serveur CodeChecker en cours d'exécution ( CodeChecker store ).
Comparez deux résultats / exécutions d'analyse pour montrer les résultats qui diffèrent entre les deux ( CodeChecker cmd diff ).
etc.
Pour plus d'informations, comment utiliser CodeChecker, consultez notre guide de l'utilisateur.
Démarrer (comment avec des exemples)
Guide de l'utilisateur de l'analyseur
Éviter ou supprimer les faux positifs
CONFIGURATION DU CHIQUE ET STATIQUE DE L'ANNALYER
Incompatibilités du CCG
Supprimer les faux positifs
Guide de l'utilisateur du serveur Web
Guide de l'utilisateur de GUI Web
Présentation des fonctionnalités de la ligne de commande et de l'interface utilisateur Web
Configuration de sécurité
Configuration de l'authentification
Configuration de l'autorisation
Déploiement
Déployer le serveur à l'aide de Docker
Configuration du serveur
Configuration de la journalisation du serveur
Configuration de plusieurs référentiels CodeChecker dans un seul serveur
Intégration continue (IC)
CodeChecker comme une action github
Configuration de la déclenchement CI avec Gerrit et Jenkins
Configuration de la base de données
Guide de configuration du backend de la base de données PostgreSQL
CodeChecker Server et Guide de mise à niveau du schéma de base de données
CodeChecker peut être utilisé comme outil générique pour visualiser les résultats de l'analyseur.
Les outils suivants sont pris en charge:
| Langue | Analyseur |
|---|---|
| C / C ++ | Analyseur statique de Clang |
| Clang Tidy | |
| Désinfectants de Clang | |
| Cppcheck | |
| Facebook inférer | |
| Coccinelle | |
| Bousculade | |
| Doc de noyau | |
| Clairsemé | |
| cpplint | |
| C # | Roslynator.dotnet.cli |
| Java | Pignon |
| Facebook inférer | |
| Python | Pylint |
| Pyflakes | |
| Javascrip | Eslint |
| Manuscrit | Tslint |
| Aller | Golint |
| Réduction | Markdownlint |
| Sphinx |
Pour plus de détails, voir la documentation des analyseurs de code pris en charge et l'outil de convertisseur de rapport.
Outils utiles qui peuvent également être utilisés à l'extérieur de CodeChecker.
Build Logger (pour générer une base de données de compilation JSON à partir de vos builds)
Convertisseur Plist / Sarif à HTML (pour générer des fichiers HTML à partir des fichiers PLIST ou Sarif donnés)
RAPPORT OUTIL CONVERTER (Pour convertir les résultats de l'analyse d'autres analyseurs au format du répertoire de rapport CodeChecker)))
Collecteur d'unité de traduction (pour collecter des fichiers source d'une unité de traduction ou pour obtenir des fichiers source qui dépendent des fichiers d'en-tête donnés)
Rapport Générateur de hachage (pour générer des identificateurs de hachage uniques pour les rapports)
Scripts auxiliaires pour l'analyse quotidienne
pipCodeChecker est disponible sur le PYPI et peut être installé avec la commande suivante:
PIP3 Installer CodeChecker
Remarque: Ce package peut être installé sur les systèmes Linux , OSX et Windows où la commande pip3 est disponible. Sur OSX , intercept-build doit être installée pour la journalisation ( CodeChecker log ). Sur Windows , la journalisation n'est pas disponible.
snapCodeChecker est disponible sur le magasin Snap et peut être installé avec la commande suivante:
Sudo Snap Installer CodeChecker - Classic
Remarque: Malheureusement, le package SNAP ne prend en charge que les noms de commande des cas inférieurs. Pour cette raison, vous devez utiliser la commande codechecker au lieu de CodeChecker partout. Pour une liste complète des commandes disponibles dans le package CodeChecker , exécutez snap info codechecker .
Pour une liste de dépendances détaillée, et pour des instructions sur la façon d'installer des versions plus récentes de Clang et Clang-tidy, veuillez consulter les exigences. Les commandes suivantes sont utilisées pour bootstrap CodeChecker sur Ubuntu 20.04 LTS:
# Installer des dépendances obligatoires pour un environnement de développement et d'analyse. # Remarque: Clang ou Clang-tidy peut être n'importe quelle version suffisamment fraîche, et ne doit pas venir du gestionnaire de packages! # En cas de CPPCheck, la version minimale prise en charge est 1.80. # En cas de gcc, la version minimale prise en charge est 13.0.0. # Inférie Clang-tidy Cppcheck G ++ Build-Essential Curl
GCC-Multilib Git Python3-dev Python3-Venv Python3-Setuptools # Dans le cas de VENV_DEV Target et Ubuntu 23 Linux, installez une bibliothèque supplémentaire: sudo apt-get install libpq-dev # install nodejs dépendance for web. Dans le cas de Debian / Ubuntu, vous pouvez utiliser les commandes # suivantes. Pour plus d'informations, consultez les documents officiels: # https://nodejs.org/en/download/package-manager/curl -sl https://deb.nodesource.com/setup_16.x | sudo -e bash -
sudo apt-get install -y nodejs # consultez codechecker source code.git clone https://github.com/ericsson/codechecker.git - Depth 1 ~ / codecheckercd ~ / codechecker # `Venv`.Make Venvsource $ pwd / venv / bin / activer # [facultatif] Si vous souhaitez utiliser des méthodes d'authentification externes (LDAP / PAM) # Suivez les instructions dans # DOCS / Web / Authentication.md # External-Authentication-Methods # Build et installer un package de codechec Path = "$ pwd / build / codechecker / bin: $ path" cd ..Notes :
Par défaut, make package créera également des objets partagés LDLogger pour 32bit et 64bit . Si vous souhaitez construire et emballer 64 bit only des objets partagés et du binaire LDLogger, vous pouvez définir la variable BUILD_LOGGER_64_BIT_ONLY à YES avant le package Build: BUILD_LOGGER_64_BIT_ONLY=YES make package .
Par défaut, le make package créera le code d'interface utilisateur s'il n'est pas encore construit ou si le code d'interface utilisateur est modifié. Si vous ne souhaitez pas construire le code d'interface utilisateur, vous pouvez définir la variable d'environnement BUILD_UI_DIST à NO avant le package build: BUILD_UI_DIST=NO make package .
Utilisez make standalone_package au lieu de make package pour éviter d'avoir à activer manuellement l'environnement avant d'exécuter CodeChecker.
Si vous avez mis à niveau le Python de votre système vers une version plus récente (par exemple, de 3.8 à 3.11 - c'est le cas lors de la mise à niveau d'Ubuntu de 20.04 LTS à 22.04 LTS), l'environnement installé ne fonctionnera pas à l'extérieur de la boîte. Pour résoudre ce problème, exécutez la commande suivante pour mettre à niveau votre checker_env également:
CD ~ / CodeChecker / Venv Python3 -M Venv.
Pour les instructions d'installation pour Mac OS X, voir la documentation du guide d'installation Mac OS X.
Pour exécuter le serveur CodeChecker dans Docker, consultez la documentation Docker. Vous pouvez trouver le conteneur du serveur Web CodeChecker au Docker Hub.
Vous pouvez installer et utiliser l'extension VScode CodeChecker à partir du Visual Studio Marketplace ou à partir d'Open VSX.
Caractéristiques principales:
Exécutez l'analyse CodeChecker de l'éditeur et voyez automatiquement les résultats.
Réanalysez le fichier actuel lors de l'enregistrement.
Commandes et tâches de construction pour exécuter CodeChecker dans le cadre d'un système de construction.
Parcourez les rapports trouvés et affichez les étapes de reproduction directement dans le code.
Naviguer entre les étapes de reproduction.

Pour plus d'informations sur la façon d'installer et d'utiliser ce plugin, consultez le référentiel de cette extension.

CodeChecker peut être exécuté via une action GitHub réutilisable pour votre projet! Vous n'avez qu'à spécifier la commande build, comme si vous exécutiez l'analyse localement.
Pour plus d'informations, consultez l'action d'analyse statique de codeChecker sur le marché des actions GitHub.
Ces étapes doivent toujours être prises dans une nouvelle invite de commande dans laquelle vous souhaitez exécuter l'analyse.
Source ~ / CodeChecker / Venv / bin / Activate # Path of CodeChecker Package # Remarque: Ignorez cette ligne si vous souhaitez toujours spécifier le Path complet de CodeChecker.Export) chemin> / build / bin: $ chemin
Analysez votre projet avec la commande check :
CodeChecker check -b "cd ~/your-project && make clean && make" -o ./results
check Imprimera un aperçu des problèmes trouvés dans votre projet par les analyseurs. Les rapports seront stockés dans le répertoire ./results au format plist XML.
Vous pouvez visualiser les résultats en tant que HTML statique en exécutant
CodeChecker parse -e html ./results -o ./reports_html
Une page d'index sera générée avec une liste de toutes les rapports dans ./reports_html/index.html
Si vous avez des centaines de résultats, vous voudrez peut-être les stocker sur le serveur Web avec un backend de base de données.
Démarrez un Web et un serveur de stockage CodeChecker dans un autre terminal ou comme processus d'arrière-plan. Par défaut, il écoutera sur localhost:8001 .
La base de données SQLite contenant les rapports sera placée dans votre répertoire d'espace de travail ( ~/.codechecker par défaut), qui peut être fournie via l'indicateur -w .
CodeChecker server
Stockez vos rapports d'analyse sur le serveur pour pouvoir utiliser la visionneuse Web.
CodeChecker store ./results -n my-project
Ouvrez la visionneuse Web CodeChecker dans votre navigateur, et vous devez être accueilli avec une application Web montrant les résultats de l'analyse.
Architecture
Disposition du package
Dépendances
Interface d'épargne
Tests de package et d'intégration
Un aperçu de l'infrastructure CodeChecker a été donné au PLDI 2020.
Márton, Gábor et Krupp, Dániel :
Talk Talk: CodeChecker
Un aperçu de haut niveau sur l'infrastructure est disponible parmi les présentations de la conférence Euro LLVM 2015.
Krupp, Dániel et Orbán, György et Horváth, Gábor et Babati, Bence :
Expériences industrielles avec l'ensemble d'outils d'analyse statique de Clang