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 .
- Un error_string, c'est un file_spec suivi d'un erreur_spec . En
option, si on veut, on peut rajouter soit un autre file_spec soit un STRING
- un file_spec c'est le chemin du fichier avec après, entre parenthèse, un
line_spec. C'est là où visual vous amènera lors du F4
- line_spec, c'est soit un NUMBER soit NUMBER-NUMBER
- et pour terminer cette partie de non-terminaux, error_spec, c'est un
ERRORKEYWORD suivi de ERRORNUMBER et d'un ":"
Hop, les terminaux maintenant :
- STRING : bon ben un string genre à la sauce C standart : "je suis un string\0" .
Rien de neuf
- FILENAME : un string qui indique le chemin pour acceder au fichier source
- NUMBER : un nombre, c'est déjà un chiffre allant de 1 à 9, suivi de n chiffres
allant de 0 à 9 (n, pouvant etre 0. Cette répétition possible est symbolisée par "*");
- ERROR NUMBER : même principe que pour NUMBER. Déjà n lettres (de A à Z), n
devant être supérieur ou égal à 1 (c'est la différence entre le "+" et "*" . Avec "*", si
vous avez bien suivi, on va de 0 à n). Ces lettres sont suivies de 4 chiffres allant de
0 à 9
- Pour terminer, ERRORKEYWORD c'est soit "error", "warning" ou "fatal error"
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 ?