Coccigrep, un grep sémantique pour le langage C basé sur Coccinelle

Posté par  (site Web personnel) . Modéré par patrick_g. Licence CC By‑SA.
45
2
sept.
2011
C et C++

Lorsque l'on travaille sur un projet C comportant un certain nombre de fichiers et de lignes de code, il arrive fréquemment que l'on se pose des questions comme "Mais où est modifié le champ data de ma structure Packet ?". grep ne suffit pas pour répondre à ce genre de questions car ne comprenant pas C, il ne sait pas, par exemple, que la variable monbopkt est une structure Packet.

coccigrep, basé sur coccinelle qui est un outil très puissant de recherche et de modification automatique de code, est un logiciel libre chargé de répondre à ce genre de questions. Il vient d'être publié en version 1.0rc1, sous licence GPL v3. Il est écrit en Python et s'interface avec les éditeurs Vim et Emacs, ce qui permet de faire les recherches depuis l'éditeur.

Le fonctionnement de coccigrep est simple, vous spécifiez quel type d'opérations vous cherchez sur une structure et ses attributs. Par exemple, si l'on souhaite savoir où est assigné l'attribut datalink de la structure Packet dans les fichiers source*c, il suffit de taper :

# coccigrep  -t Packet -a datalink -o set  source*c
source-af-packet.c:301 (Packet *p):     p->datalink = ptv->datalink;
source-erf-dag.c:525 (Packet *p):     p->datalink = LINKTYPE_ETHERNET;

Tout un ensemble d'opérations est disponible et ce dernier n'est pas fermé. Vous pouvez en effet rajouter vos propres opérations en créant des patchs sémantiques au format coccinelle.

Coccigrep s'appuie sur coccinelle pour effectuer ses recherches dans le code source. Coccinelle est un logiciel développé par l'INRIA, le LIP6 et l'université de Copenhague. Il est régulièrement utilisé pour effectuer des contrôles et des modifications sur le noyau Linux. De nombreux développeurs l'utilisent pour procéder à des modifications importantes de codes lors du changement d'une API par exemple.

Aller plus loin

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.