Liste d'outils utiles au développeur C
Attention: page en cours de développement.
Nous listons sur cette page un certain nombre d'outils qui peuvent s'avérer utiles un jour ou l'autre aux développeurs C.Nous avons tenté de les regrouper par catégories:
- Compilateurs
- Émulateurs, machines virtuelles, ...
- Environnements de développement intégrés (IDE) et éditeurs
- Documentation et mise en forme
- Compilation modulaire et portable
- Navigation et recherche (dans du code-source)
- Débuggeurs
- Analyseurs de code
- Profileurs
- Autres Outils Unix utiles au programmeur
N'hésitez pas à nous contacter si vous voyez un élément pertinent à ajouter à cette liste.
Compilateurs
Il existe de nombreux compilateurs C, par exemple:- GCC : la suite de compilateurs du projet GNU. Supporte C et d'autres langages sur un grand nombre de plates-formes.
- MinGW : version de gcc et environnement d'exécution pour Microsoft Windows.
- djgpp : gcc (et d'autres utilitaires de développement) pour DOS 32 bits.
- ICC : un compilateur C++ (C) pour processeurs Intel
- TCC: un compilateur C petit et rapide pour x86.
Émulateurs, machines virtuelles, ...
Il est souvent utile de tester un logiciel sur un système d'exploitation autre que celui sur lequel on développe. Voici divers logiciels qui peuvent servir pour cela:- Cygwin : collection de logiciels libres permettant d'utiliser des programmes Unix avec Microsoft Windows.
- Qemu, : « émulateur d'ordinateur » permettant de faire tourner un ou plusieurs systèmes d'exploitation (ou seulement des processus) sur un système d'exploitation déjà installé sur la machine.
- Xen : permet de faire tourner plusieurs systèmes d'exploitation (et leurs applications) de manière isolée sur une même machine physique sur plate-forme x86. Les systèmes d'exploitation invités partagent ainsi les ressources de la machine hôte.
- VMware : crée un environnement clos dans lequel sont disponibles un processeur, des périphériques et un BIOS virtuel.
- Virtual Box: encore un logiciel du type Qemu/VMware.
Environnements de développement intégrés (IDE) et éditeurs
- Dev-C++ : IDE complet et libre pour le développement en C et C++ sous Windows.
- Kdevelop : l'IDE développé initialement pour KDE.
- Xcode: l'IDE disponible sous MAC OS X.
- emacs: éditeur de texte très complet et extensible. Il dispose de nombreux « modes » permettant de l'interfacer avec des logiciels externes et qui fournissent des fonctionnalités équivalentes à un IDE (c'est l'environnement de développement des auteurs).
- vi / vim / gvim / elvis : des éditeurs puissants et légers, mais qui nécessitent un certain temps d'apprentissage.
- Ultraedit : éditeur avancé et stable en environnement Windows.
- Notepad2: une version améliorée du Notepad de Windows supportant la coloration syntaxique pour de nombreux langages, notamment le C.
Documentation et mise en forme
- Doxygen : outil de documentation automatique de code supportant de nombreux langages.
- CWEB : le système de documentation structurée de D. E. Knuth. spécialisée pour les codes C, C++ et Java.
- indent : outil d'indentation automatique de fichiers sources, supportant plusieurs styles de programmation.
Compilation modulaire et portable
- make :
outil facilitant la compilation et l'édition de liens. Plus généralement,
make
permet de maintenir les éléments d'un programme en fonction de leurs dépendances. - GNU Autotools :
ensemble de programmes (autoconf, automake,
libtool et gettext) assurant un développement portable et uniforme
d'un projet de programmation en environnement Unix (le fameux "
./configure; make; make install;
").
La manipulation de ces outils est loin d'être aisée, aussi renvoyons-nous le lecteur sur ce tutorial ou celui-ci. Les bonnes pratiques à adopter lors de l'utilisation des autotools sont rappelées dans cet article. - CMake : outil open-source et cross-plateform de gestion des processus de compilation et l'édition de liens.
- Bakefile : outil générateur de makefiles cross-plateform et cross-compiler.
Navigation et recherche (dans du code-source)
- CSCOPE :
outils de recherche / navigation dans du code source. Notez qu'il existe divers modes pour l'intégrer à
emacs
. - Cbrowser : interface graphique à cscope.
- ctags et etags :
créent une base de données avec les symboles du code source du répertoire courant pour respectivement
vi
etemacs
. Cela assure des fonctionnalités proches de celles decscope
. - grep :-)
Débuggeurs
- GDB : le débuggeur du projet GNU.
- DDD, xxgdb et KDbg : interfaces graphiques pour gdb
- Valgrind : un ensemble d'outils pour le débugage et le profiling sous Linux/x86.
- Purify est un outil de débugage détectant les erreurs d'allocation.
- electricfence : permet de détecter les problèmes de mémoire dynamique.
- TotalView : un débuggeur pour Linux/Unix et Mac OS X.
Analyseurs de code
- lint: autrefois, les compilateurs généraient peu d'avertissements (pour des questions de temps d'exécution), et l'on utilisait
lint
pour analyser le code à la recherche de problèmes. De nos jours, les avertissements de cet outil sont pour la plupart intégrés dans le compilateur. On trouve encore cet outil sur un certain nombre de systèmes Unix, par exemple les BSD. - splint: version orientée sécurité de
lint
. - Flawfinder un analyseur de code pour detecter les risques de sécurité classés par niveaux.
- Sparse : l'outil développé initialement par Linus Torvalds pour détecter des erreurs dans le noyau Linux.
- D'autres analyseurs de codes sont listés sur cette page.
Profileurs
- Gprof : un profileur (temps par fonction, etc). Diverses implémentation existent (fournies avec le compilateur ou le système).
- kprof : interface graphique pour gprof ajoutant des fonctionnalités.
- xprofiler : un profileur développé par IBM.
- Valgrind : un ensemble d'outils pour le débugage et le profiling sous Linux/x86.
Autres Outils Unix utiles au programmeur
Les systèmes Unix fourmillent de petits utilitaires bien pratiques à qui sait les utiliser.NB: il existe différentes implémentations de ces outils, selon le système.
- ldd : affiche les bibliothèques utilisées par un programme.
otool
[pour MacOS X/Darwin]: affiche des informations sur des fichiers objets. En particulier 'otool -L
' produit un résultat équivalent àldd
.nm
: fournit la table des symboles définis dans un programme.lsof
: fournit la liste des fichiers ouverts. Permet également de voir les sockets ouvertes par un processus. Différentes implémentations existent.strings
: recherche de chaînes imprimables dans un objet éventuellement binaire.- strace (Linux) / ktrace (BSD): traceurs d'appels système.
time
: permet de déterminer le temps requis pour l'exécution d'un programme.- objdump : récupère des informations variées sur des fichiers objets.
- elfsh: permet de manipuler les fichiers exécutables au format ELF.
- ltrace : permet de lancer une commande et d'intercepter les librairies dynamiques chargées lors de l'exécution de la commande.