Intégration d'outils dans visual : gestion des erreurs

chrisbk
Yop tlm

Mettons que pour une raison X ou bien Y, vous avez fait un chtiot prog. ce chtiot prog analyse des fichiers (exemple de prog dont je veux parler : nvasm) et histoire d'être tranquille vous avez bourré le tout dans visual (custom build, par exemple)

Bien, maintenant, le fin du fin, l'ultra fin, serait d'utiliser un des trucs les plus pratique de visual : le positionnement automatique lors d'une erreur / warning. (vous savez, erreur, hop un coup de tatane sur F4 et vous êtes sur l'erreur). Un programme avec ce genre de truc, tout de suite, c'est une autre classe.

Comment faire ? simple : que dit la msdn ? (réflexe à prendre rapidement, si vous ne l'avez pas déjà) Elle dit qu'il faut utiliser les règles suivantes pour le formatage des erreurs:

Error Type Description
error_string file_spec error_spec (STRING | file_spec STRING)
file_spec FILENAME ‘(‘line_spec’)’ ’:’
line_spec NUMBER | NUMBER ‘-’ NUMBER
error_spec ERRORKEYWORD ERRORNUMBER ‘:’

where:
   STRING Null-terminated string
   FILENAME Valid file specification and text file
   NUMBER {1–9}{0–9}*
   ERRORNUMBER {A–Z}+{0–9}{0–9}{0–9}{0–9}
   ERRORKEYWORD “error” | “warning” | “fatal error”



Certes, c'est bien joli, mais que cela veut-il donc dire ?
L'idée qui préside derrière tout cela, c'est que visual va intercepter les printf(..) de votre programme pour les mettre dans la fenêtre d'output . Et ce faisant il va parser ce que vous lui envoyez . Et s'il y voit quelque chose qui est en accord avec la grammaire ci dessus, il va le considérer comme erreur (ou warning..) . Après cela, si vous faite ensuite F4 il vous amenera sur le lieu du délit.
C'est formidable.

Bon, en avant, décrytons cette "grammaire" . Si j'ai bien assimilé mes cours de cette année (nous passerons sur ma note obtenue aux exams), une grammaire se décompose en deux bouts : les non terminaux, et les terminaux

Déja, les non-terminaux. Non-terminaux, ca veut dire que..heuh..ben c'est pas terminal quoi (ca "recurse", si vous voulez) . Un non-terminal est composé de terminaux et / ou de non-terminaux
On commence par error_string .


Hop, les terminaux maintenant :


Vala, on a fait le tour, dans la pratique qu'est ce que cela rend ?
printf("%s(%d) : error : une erreur", fichierSource, ligneSource);
printf("%s(%d) : warning : un warning", fichierSource, ligneSource);
rendra peut-être dans la fenêtre output:
c:\pouet\pouet.c(20) : error : une erreur
c:\pouet\pouet.c(20) : warning : un warning

pouet.c - 1 error(s), 1 warning(s)
et hop, un coup de F4 et vous avez gagné..... (j'aurais pu me contenter des ces deux dernières lignes pour faire cette doc, mais je ne pouvais résister a l'envie d'étaler ma culture (en priant juste pour ne pas avoir dit n'imp :)
Franchement, il est pas formidable ce visual ?