Cours VB.NET

Image non disponible


précédentsommairesuivant

XII. Débogage

XII-A. Débogage du code VB(rechercher les 'Bugs')

Le débogage est la recherche des bugs, les erreurs de logique.(voir Traiter les erreurs)

Image non disponibleVoir la vidéo : au format 'Flash'> ou au format 'Avi' en Visual Basic 2005.

Rappelons qu'il existe:
  • Les erreurs de syntaxe.
  • Les erreurs de logique.
  • Les erreurs d'exécution.

Les erreurs de syntaxe sont détectées automatiquement par l'éditeur de Visual Studio. ou lors de la génération du projet en mode Run. La compilation vérifie les types des données, les paramètres....

Les erreurs d'exécution surviennent lorsque l'exécution d'une instruction échoue ( tentative d'ouverture d'un fichier qui n'existe pas par exemple). Cela provoque l'apparition d'un message et provoque l'arrêt brutal de l'application. Il faut donc prévoir une gestion des éventuelles erreurs d'exécution afin d'éviter l'arrêt de l'application. A l'aide de Try Catch, on pourra intercepter l'erreur et informer l'utilisateur, prévoir une correction.

Les erreurs de logique sont plus difficiles à détecter. Le code est syntaxiquement correct, mais il ne réalise pas les opérations prévues. C'est là qu'intervient le débogage afin de diagnostiquer l'origine de l'erreur.

Pour déboguer, il faut lancer l'exécution du programme puis,
  • Suspendre l'exécution à certains endroits du code
  • Voir ce qui se passe puis faire avancer le programme pas à pas.
  • Afficher des informations de débogage quand le programme tourne.

XII-B. Suspendre l'exécution en vb 2008 ou vb 2010

En VB 2008, pour démarrer et arrêter l'exécution, on utilise les boutons suivants:

Image non disponible

On lance le programme avec le premier bouton, on le suspend avec le second, on l'arrête définitivement avec le troisième..

On peut suspendre (l'arrêter temporairement) le programme:
  • avec le second bouton
  • grâce à des points d'arrêt (pour définir un point d'arrêt en mode de conception, cliquez en face d'une ligne dans la marge grise: la ligne est surlignée en marron. Quand le code est exécuté , il s'arrête sur cette ligne marron).
  • en appuyant sur Ctrl-Alt-Pause
     
    Sélectionnez
    
    For i= 1 To 6
    
    Tableau(i)=i*i
    
    Next i

    En plus si on clique sur le rond de gauche avec le bouton droit de la souris, on ouvre un menu permettant de modifier les propriétés de ce point d'arrêt (il y a la possibilité d'arrêter au premier ou au Xième passage sur le point d'arrêt, ou arrêter si une expression est à True ou à changé)

  • en incluant dans le code une instruction Stop

Attention: Si vous utilisez des instructions Stop dans votre programme, vous devez les supprimer avant de générer la version finale.

Les transformer en commentaire :

 
Sélectionnez

' Stop

ou utiliser des instructions conditionnelles :

 
Sélectionnez

#If DEBUG Then
Stop
#End If

Dans ce cas, en mode Debug l'instruction Stop sera exécutée, pas en mode Release.

XII-C. Débogage pas à pas en vb 2008 ou 2010

Quand le programme est suspendu, on peut observer les variables, déplacer le point d'exécution, on peut aussi faire marcher le programme pas à pas (instruction par instruction) et observer l'évolution de la valeur des variables, on peut enfin modifier la valeur d'une variable afin de tester le logiciel avec cette valeur.

F11 permet l'exécution pas à pas, instruction par instruction (y compris des procédures appelées: si il y a appel à une autre procédure, le pas à pas saute dans l'autre procédure)

F10 permet le pas à pas (sans détailler les procédures appelées: exécute la procédure appelée en une fois)

Maj+F11 exécute jusqu'à la fin de la procédure en cours.

On peut afficher ou définir l'instruction suivante, exécuter jusqu'au curseur, insérer un point d'arrêt ou un espion en cliquant sur le bouton droit de la souris et en choisissant une ligne du menu (VB 2003).

Image non disponible

Espion express (VB 2003 et 2005)permet de saisir une expression (variable, calcul de variables) et de voir ensuite dans une fenêtre 'espion' les modifications de cette expression au cours du déroulement du programme.

Image non disponible

Exemple en VB 2005, c'est pareil en VB 2003: suivre la valeur de la variable de boucle 'i'.

Sur la ligne , bouton droit, 'espion express..' dans la fenêtre qui s'ouvre à droite,

Tapez 'i' puis 'Fermer', la fenêtre espion apparaît en bas avec la valeur de i

Tapez F10 , F10.. la boucle tourne et i est incrémenté.

Atteindre la définition permet d'afficher la déclaration de la variable et ainsi de voir quelle est sa portée et si elle est initialisée. S'il s'agit du nom d'une procédure, on se retrouve dans la procédure (pour voir ce qu'elle contient)

On peut grâce au menu 'Débogage' puis 'Fenêtre' ouvrir les fenêtres:

Automatique uniquement en VB 2003, qui affiche les valeurs des variables de l'instruction en cours et des instructions voisines.

Immédiat (VB 2003 2005) ou il est possible de taper des instructions ou expressions pour les exécuter ou voir des valeurs.

Taper "?I" (c'est l'équivalent de "Print I" qui veut dire: afficher la valeur de la variable I) puis valider, cela affiche la valeur de la variable I.

Image non disponible

Autre exemple, pour voir le contenu d'un tableau A(), tapez sur une seule ligne: "For i=0 to 10: ?A(i): Next i"

Enfin, il est possible de modifier la valeur d'une variable: Taper" I=10" puis valider, cela modifie la valeur de la variable.

Espions permettant d'afficher le contenu de variables ou d'expressions.

Espions Express permet d'afficher la valeur de l'expression sélectionnée.

Points d'arrêts (VB 2003 et 2005) permet de modifier les propriétés des points d'arrêts. on peut mettre un point d'arrêt en cliquant dans la marge grise à gauche: l'instruction correspondante s'affiche en marron et l'exécution s'arrêtera sur cette ligne.

Me (VB 2003) affiche les données du module en cours.

Variables locales (VB 2003 et 2005)affiche les variables locales.

Image non disponible

Modules (VB 2003 )affiche les dll ou .exe utilisés.

Mémoire, Pile d'appels, Thread, Registres, Code Machine permettent d'étudier le fonctionnement du programme à un niveau plus spécialisé et technique.

Toutes ces fenêtres ne sont pas disponibles dans les versions Express.

XII-C-1. Comment voir rapidement la valeur des propriétés ou de variables ?

Il est toujours possible de voir la valeur d'une propriété d'un objet en la sélectionnant avec la souris:

Exemple on sélectionne label1.Text et on voit apparaître sa valeur.

Image non disponible

Pour les variables, il suffit que le curseur soit sur une variable pour voir la valeur de cette variable.

On peut aussi copier une expression dans la fenêtre 'immédiat' , mettre un ? avant et valider pour voir la valeur de l'expression.

Attention à l'affichage:

Parfois en mode pas à pas on regarde le résultat d'une instruction dans la fenêtre du programme. Par exemple on modifie la propriété text d'un label et on regarde si le label à bien changé. Parfois la mise à jour n'est pas effectuée car le programme met à jour certains contrôles seulement en fin de procédure. pour palier à cela et afficher au fur et à mesure, même si la procédure n'est pas terminée, on utilise la méthode Refresh de l'objet qui 'met à jour'.

Exemple:

 
Sélectionnez

Label1.text="A"

Label1.Refresh

Cela ne semble pas toujours fonctionner. Avez-vous une explication?

XII-C-2. Modification du code source

En version 2003, les modifications effectuées lors de la suspension de l'exécution, ne sont pas prises en compte lors du redémarrage.

Depuis VB 2005 Il y a maintenant le 'Edit and continue': en mode Debug, on peut modifier une ligne et poursuivre le programme qui tiendra compte de la modification (Sauf pour les déclarations).

Depuis la version 2005, Il est proposé des solutions pour corriger les erreurs de code:

Une fenêtre vous indique les corrections à faire.

Si je veux afficher une valeur numérique (avec option Strict=On),il y a erreur, VB me propose la correction:

Image non disponible

XII-D. Débogage en vb 2010

Vb propose des solutions pour corriger les erreurs de code:

Si je fais une erreur Vb la souligne en ondulé bleu, si je mets le curseur dessus il m'explique l'erreur:

Image non disponible

S'il y a un soulignement rouge, mettre le curseur dessus affiche un bouton avec un point d'exclamation qui ouvre une fenêtre donnant la correction de l'erreur:

Image non disponible

Si je lance le programme en mode 'Run' et qu'il y a des erreurs, Vb me le signale et répertorie les erreurs dans la liste des taches en bas.

Image non disponible

Mode débogage (mode BREAK):

Une fois lancée l'exécution (F5),on peut arreter temporairement l'exécution:
En tapant Ctrl +Pause
En cliquant sur Image non disponible (visible lors de l'exécution).
En utilisant un point d'arrêt (Avant l'exécution ou en cours d'exécution,en cliquant dans la colonne grise avant la ligne de code, cela affiche un rond, un point d'arrêt).
En ajoutant une instruction STOP dans le code.

On peut modifier le code puis relancer l'exécution avec F5.

On peut voir la valeur d'une propriété d'un objet , d'une variable en le pointant avec la souris:

Image non disponible

Il s'affiche un petit cadre donnant la valeur de la propriété d'un objet.
Si on clicke sur la punaise, l'affichage de la variable et de sa valeur devient permanent et la valeur est mise à jour.

Quand on clique sur une variable, cette variable est surlignée dans l'ensemble du code:

Image non disponible

Il y a un menu déboguer:

Image non disponible

F8 permet l'exécution pas à pas (y compris des procédures appelées).

MAJ F8 permet le pas à pas (sans détailler les procédures appelées).

CTRL+F10 pas à pas principal.

MAJ+F11 pas à pas sortant.

Espions permettant d'afficher le contenu de variables ou d'expressions.

Espions Express permet d'afficher la valeur de l'expression sélectionnée.

Si dans le code ,on clicke droit, s'ouvre un menu contextuel:

Image non disponible

CTRL+F8 exécute jusqu'au curseur.

Alt+* afficher l'instruction suivante.

Toutes ces actions peuvent être effectuées par les menus, les raccourcis.

On peut aussi ajouter des boutons de déboguer dans la barre d'outils(menu 'Affichage', 'Barre d'outils', 'déboguer')

Le bouton 'variables locales'(CTRL+ALT+V puis L) affiche toutes les variables locales et leur valeur:

Image non disponible

Le bouton immédiat ouvre une fenêtre qui permet de taper du code qui sera immédiatement exécuté.
(Ici on affiche la valeur de b avec '?b', on modifie sa valeur avec 'b=b+1')

Vb choisit automatiquement la configuration Debug (compilée avec des informations de débogage symboliques et aucune optimisation) lorsque vous cliquez sur Démarrer dans le menu Déboguer et la configuration Release ( ne contient pas d'informations de débogage relatives aux symboles et est entièrement optimisée) lorsque vous utilisez le menu Générer.

XII-E. Sortie des informations de débogage

On veut parfois afficher automatiquement des résultats intermédiaires, un message destiné au programmeur dans telle circonstance...quand le programme tourne.

XII-E-1. Objet Console

On peut écrire sur la fenêtre console, quand on a parfois besoin d'afficher des informations, mais uniquement pour le programmeur:

 
Sélectionnez

Console.WriteLine( myKeys(i))

Mais dans un programme Windows, il n'y a pas de console!! la sortie est donc envoyée vers la fenêtre de sortie (voir Debug)(Menu Affichage>Autres fenêtres>Sortie pour voir la fenêtre)

Autre exemple:

 
Sélectionnez

Dim amis() As String = {"pierre", "jean", "jacques", "toto"}

For Each nom As String In amis

Console.Out.WriteLine(nom)

Next

XII-E-2. Objet Debug

L'espace de noms Systems.Diagnostics est nécessaire.

Pour déboguer du code, on a parfois besoin d'afficher des informations, mais uniquement pour le programmeur, en mode debug afin de suivre le cheminement du programme ou la valeur d'une variable ou si une condition se réalise; pour cela on utilise une fenêtre nommée 'Sortie'(Output). (Menu Affichage>Autres fenêtres>Sortie)

Pour écrire dans la fenêtre Output (sans arrêter le programme):

  • Du texte:
 
Sélectionnez

Debug.Write(Message)

et pour ajouter un passage à la ligne:

 
Sélectionnez

Debug.WriteLine(Message)
  • Le contenu d'une variable:
 
Sélectionnez

Debug.Write(Variable)
  • Les propriétés d'un objet:
 
Sélectionnez

Debug.Write(Objet)

Exemple:

 
Sélectionnez

Debug.Write("ça marche")    'Affiche 'ça marche'

Dim A as Integer=2

Debug.Write(A)    'Affiche 2

Debug.Write(A+2)  'Affiche 4

On voit que s'il y a une expression, elle est évaluée.

On peut aussi afficher un message si une condition est remplie en utilisant WriteLineIf ou WriteIf:

 
Sélectionnez

Debug.WriteLineIf(i = 2, "i=2")

Affiche 'i=2' si i=2

Cela vous permet, sans arrêter le programme (comme le fait Assert), d'être informé quand une condition est vérifiée.

Debug.Assert par contre affiche une fenêtre Windows et stoppe le programme si une assertion(une condition) passe à False.

 
Sélectionnez

Debub.Assert(Assertion)

Debub.Assert(Assertion, Message1)

Debub.Assert(Assertion, Message1, Message2)

L'exemple suivant vérifie si le paramètre 'type' est valide. Si le type passé est une référence null (Nothing dans Visual Basic), Assert ouvre une boite de dialogue nommé 'Echec Assertion' avec 3 boutons 'Abandonner, Recommencer' 'Ignorer'.. La liste des appels est affichée dans la fenêtre (procédure en cours en tête de liste, module et numéro de ligne en première ligne)

 
Sélectionnez

Public Shared Sub UneMethode (type As Type, Typedeux As Type)
Debug.Assert( Not (type Is Nothing), "Le paramètre Type est=Nothing ", 
	_"Je ne peux pas utiliser un Nothing")

....
End Sub UneMethode
 

Debug.Fail

Fait pareil mais sans condition.

XII-E-3. Trace

Trace possède les mêmes fonctions que Debug (Write, WriteIf, Assert, Fail..) mais la différence est que Trace permet d'afficher à l'utilisateur final par défaut.

XII-E-4. Mode 'Trace', 'Release', 'Debug'

En VB 2003, en haut de la fenêtre de l'IDE il y a une liste déroulante elle contient:

Release. (à utiliser pour générer la version à distribuer)

Debug (à utiliser pour générer une version à tester)

En VB 2005, si vous choisissez les paramètres de développement Visual Basic, l'outil qui permet de choisir entre la configuration Debug et Release n'apparaît pas dans la barre d'outils. Visual Studio choisit automatiquement la configuration Debug lorsque vous cliquez sur Démarrer dans le menu Débogueur et la configuration Release lorsque vous utilisez le menu Générer

Trace est activé par défaut. Par conséquent, du code est généré pour toutes les méthodes Trace dans les versions release et debug. Ceci permet à un utilisateur final d'activer le traçage pour faciliter l'identification du problème sans que le programme ait à être recompilé.

Par opposition, Debug est désactivé par défaut dans les versions release, donc aucun code exécutable n'est généré pour les méthodes Debug.

On peut utiliser une constante nommé DEBUG qui aura la valeur True si on est en mode Debug.

Cela permet d'écrire:

 
Sélectionnez

#If Debug Then

    Stop

#End If

Ici Stop se produira uniquement si on est en mode Debug; en mode Release, il n'y aura pas d'arrêt.

XII-F. Comprendre les 'Messages d'erreur'

Quand il y a une erreur de syntaxe, VB souligne l'erreur. Mettre le curseur sur l'erreur, un message d'erreur apparaît:

Image non disponible

En VB 2005 un panneau d'exclamation permet d'ouvrir une fenêtre proposant le moyen de corriger l'erreur:

Image non disponible

Ici on met dans la propriété text d'un label un Integer, alors qu'il faut mettre une String (Option Strict est probablement égal à On); Vb montre la correction : CStr(i) converti i en String.

Certains messages d'erreur, pour les débutants, sont parfois totalement incompréhensible!!

Voyons quelques messages très fréquents:

XII-F-1. Instance d'objet

"La référence d'objet n'est pas définie à une instance d'un objet".

La plupart du temps cela veut dire qu'on utilise un membre d'un Objet alors qu'on n'a pas instancié cet objet.

Il y a bien une Classe, mais pas d'objet instancié à partir de cette Classe, on veut utiliser un membre de la Classe alors qu'on ne peut utiliser un membre que sur une instance.

Exemple:

 
Sélectionnez

Dim bt As  Button

bt.BringToFront()

Il n'existe pas réellement d'objet Button : la référence d'objet (bt) n'est donc pas une instance.

Il aurait fallu écrire:

 
Sélectionnez

Dim bt As New Button

bt.BringToFront()

XII-F-2. Membre absent

Texte n'est pas un membre de System.Windows.Forms.TextBox"

Parfois on fait une bête faute de frappe:

Image non disponible

Il faut taper : text!!

D'autres fois, on se trompe sur la classe et instance.

 
Sélectionnez

TextBox1.IsNullOrEmpty  donne le message:

"IsNullOrEmpty n'est pas un membre de System.Windows.Forms.TextBox"

On se trompe: on pense que IsNullOrEmpty est un membre de l'instance TextBox1, en fait c'est un membre de la classe String; il faut écrire:

 
Sélectionnez

If String.IsNullOrEmpty(TextBox1.Text)

XII-F-3. Type Attendu

"Type attendu"

Exemple:

 
Sélectionnez

Private MyVariable As New Obladioblada

Après As New VB attend un type (Integer , Short, String) ou un nom de classe (Form1..). Obladioblada n'est pas une classe (un type!!)

Exemple2:

 
Sélectionnez

' Déclaration Objet DataSet

Private ObjetDataSet As New dataset

dataset est souligné comme une erreur "type attendu"!!: Après New Vb attend un type d'objet, une classe, dataset n'est donc pas considéré comme une classe car il n'est pas reconnu: la Classe correspondante n'a pas été importée.

En fait dataset ne peut être utilisé que si Imports System.Data a été ajouté avant, dans ce cas Vb sait que c'est un type .

XII-F-4. Identificateur attendu

 
Sélectionnez

 Dim 2a As Integer 

2 est surligné, si on met la souris sur le "2", le message 'Identificateur attendu' apparaît. Erreur: un nom de variable ne doit pas commencer par un chiffre, Vb considère donc que '2a' n'est pas un identificateur (un nom de variable' valide).


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.