 |
Maîtriser le débogage.
|
Objectif du cours...
- Maitriser le débogage des applications Visual Basic,
- Création de fichiers Logs avec prise en compte d'un niveau de débogage.
|
1
|
Utilisation du menu débogage de Visual Basic. |
Souvent, les programmeurs ont la fâcheuse habitude de placer des points d'arrêts partout dans le programme pour déboguer, car ils ne connaissent que la commande Exécuter (F5). Le menu Débogage de Visual Basic offre quatre commandes essentielles qui permettent de déboguer plus rapidement, voire en se passant complètement des points d'arrêt (je ne les utilise quasiment jamais). Ces commandes sont les suivantes :
- Exécuter jusqu'au curseur (Ctrl+F8) : l'exécution va se faire jusqu'au curseur de texte. C'est comme si on avait placé un point d'arrêt là où se trouve le curseur.
- Pas à Pas détaillé (F8) : la ligne en cours est exécutée, l'exécution est suspendue sur la ligne suivante. Si la ligne en cours est un appel de fonction, on entre dans la fonction et l'exécution est suspendue sur la première ligne de la fonction. C'est comme si on avait mis un point d'arrêt sur la première ligne de la fonction appelée.
- Pas à pas principal (Maj+F8) : la ligne en cours d'exécution est exécutée, l'exécution est suspendue sur la ligne suivante. Si la ligne en cours est un appel de fonction, elle est intégralement exécutée, et l'exécution est suspendue sur la ligne suivant l'appel de la fonction.
- Pas à pas sortant (Ctrl+Maj+F8) : si on est dans une fonction, on termine l'exécution de celle-ci, l'exécution est suspendue sur la ligne suivant l'appel à cette fonction.
2
|
Visualiser le contenu des variables. |
Lorsque l'exécution est suspendue, vous pouvez voir le contenu des variables. Pour cela, vous avez plusieurs solutions :
- Faire glisser le curseur de la souris sur une variable. Le contenu de la variable est alors affiché dans une info-bulle.
- Utiliser la commande
Ajouter un espion du menu débogage. La fenêtre des espions s'affiche et s'efface dans le menu Affichage. Les espions sont très pratiques : cela permet de consulter en un coup d'oeil le contenu de plusieurs variables, ou de voir le contenu des tableaux (pas possible avec les info-bulles).
- Le monitoring est extrêment pratique, il permet d'écrire dans un fichier texte ce qu'il se passe dans votre application. Nous devons le programmer entièrement à la main, mais c'est très facile : une fonction qui reçoit en paramètre une chaine de caractères et l'écrit dans un fichier texte :
Sub Monitor(Message as string)
Dim f as Integer
F = Freefile
Open "c:\Log.txt" For Append as f
Print #f, Date, Time, Message
Close f
End Sub
' Exemple d'appel à cette fonction
Monitor "Reçu un paquet TCP/IP sur le port " & Port
- Remarquez que le fichier Log.txt est fermé immédiatemment après y avoir ajouté une ligne. Ainsi, si notre programme plante, le fichier est quand même consultable car il a été fermé proprement.
- La fonction Monitor peut également écrire les messages dans une autre sortie que le fichier, par exemple dans un contrôle label de la fenêtre de l'application :
Sub Monitor(Message as string)
LabelMonitor.Caption = Message & VbCrLf & LabelMonitor.Caption
End Sub
- Nous pouvons également paramétrer la fonction Monitor pour préciser à chaque appel si on écrit dans le fichier ou à l'écran. La fonction suivante est assez sophistiquée puisqu'elle permet de faire les deux à la fois (voir l'exemple d'appel) :
Const MONITOR_FICHIER = 1
Const MONITOR_ECRAN = 2
Sub Monitor(Message as string, Sortie as Integer)
If Sortie And MONITOR_FICHIER Then
Dim f as Integer
F = Freefile
Open "c:\Log.txt" For Append as f
Print #f, Date, Time, Message
Close f
EndIf
If Sortie And MONITOR_ECRAN Then
LabelMonitor.Caption = Message & VbCrLf & LabelMonitor.Caption
EndIf
End Sub
' Exemple d'appel à cette fonction
Monitor "Le programme appelle un module x", MONITOR_FICHIER + MONITOR_ECRAN
4
|
Ajouter un "niveau de débogage" (Debug Level). |
Les applications professionnelles ont un donnée suplémentaire : le niveau de débogage. Cela se traduit par :
- un niveau de débogage propre à chaque message :
- un niveau bas (0) signifie que le message sera tout le temps affiché, y compris dans la version définitive de l'application. C'est donc un message qui peut intéresser l'utilisateur final de l'application. Par exemple, si l'application doit envoyer un courrier électronique et qu'il y a une erreur avec le serveur SMTP, elle va faire un monitoring de cette erreur au niveau 0.
- un niveau moyen (par exemple 1) peut servir au programmeur à savoir où le programme plante. Il permet donc de tracer le suivi du déroulement du programme (notamment, pour savoir quelles procédures sont appelées).
-
un niveau élevé (par exemple 2) peut server au programmeur à suivre la valeur des variables critiques du programme. Ces messages sont donc destinés à comprendre précisément le déroulement du programme dans le but de le déboguer. Par exemple, savoir quelle fonction a été appelée, ou le contenu de certaines variables, sont des informations qui servent au débogage.
- un niveau global de débogage :
- Il détermine quels sont les messages affichés (messages dont le niveau est inférieur ou égal au niveau global) et ceux passés sous silence (messages dont le niveau est supérieur au niveau global).
- Il peut être défini dans la configuration de l'application, pour qu'on puisse le modifier à volonté.
-
Lorsque vous déployez une application, vous mettez ce paramètre à 0. Lorsqu'un utilisateur a des plantages, vous lui dites d'augmenter le niveau global de débogage, de façon à obtenir un maximum d'informations. Le programmeur pourra alors récupérer ces informations pour analyser le problème.
Voici le programme qui gère intégralement cela :
Const DEBUGLEVEL0 = 0
Const DEBUGLEVEL1 = 1
Const DEBUGLEVEL2 = 2
Dim GlobalDebugLevel As Integer
Sub Main()
Config_ChargeConfig("MonApplication.INI") voir
atelier
config
GlobalDebugLevel = Config_GetValeur("Debug", "Debug Level")
End Sub
Sub Monitor(Message As String, Sortie As Integer, Optional MessageLevel=0)
If MessageLevel <= GlobalDebugLevel Then
...
EndIf
End Sub
' Exemples d'appel à cette fonction
Monitor "L'envoi d'email a échoué", MONITOR_FICHIER, DEBUGLEVEL0
Monitor "VarsystemXY52 = " & VarsystemXY52, MONITOR_FICHIER, DEBUGLEVEL2