08 visual basic .net - debogage et gestion des exceptions
1. Microsoft Visual Basic .NET
Découverte du nouvel environnement
Visual Studio .NET
Eléments du langage Visual Basic .NET
Etude et mise en œuvre des
fonctionnalités du nouveau Framework
.NET
Programmation orientée objet et
développement de composants
réutilisables
Accès aux données avec ADO .NET
Professeur: Hamza SAID
1
2. Etude et mise en œuvre des fonctionnalités
du nouveau Framework .NET
Classes de base spécialisées dans
le traitement des valeurs numérique,
des chaînes de caractères et des
dates ainsi que leur formatage
Classes dédiées aux opérations sur
les fichiers et les dossiers
Débogage et Gestion des
exceptions
Professeur: Hamza SAID
2
3. 1. Introduction au débogage
2. Travailler en mode Break
3. Les fenêtres de débogage
4. La notion d'exception
Débogage et Gestion des exceptions3
Professeur: Hamza SAID
Etude et mise en œuvre des fonctionnalités
du nouveau Framework .NET
4. • Visual Studio .NET offre plusieurs outils de
débogage qui permettent d'observer et de vérifier
le comportement d’une l'application.
• Il existe 3 types d’erreur:
1. Les erreurs de syntaxe.
2. Les erreurs d'exécution.
3. Les erreurs de logique.
Introduction au débogage4
Professeur: Hamza SAID
Débogage et Gestion des exceptions
5. 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.
• Sont liées aux types des données, paramètres....
Introduction au débogage5
Professeur: Hamza SAID
Débogage et Gestion des exceptions
6. Les erreurs d'exécution
• Surviennent lorsque l'exécution d'une instruction échoue
• Ex.: tentative d'ouverture d'un fichier qui n'existe pas
• Provoque l'apparition d'un message et l'arrêt brutal de
l'application.
• Il faut prévoir une gestion des erreurs d'exécution afin
d'éviter l'arrêt de l'application.
• À l'aide de l’instruction « Try Catch », on pourra intercepter l'erreur et informer
l'utilisateur.
Introduction au débogage6
Professeur: Hamza SAID
Débogage et Gestion des exceptions
7. 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.
Introduction au débogage7
Professeur: Hamza SAID
Débogage et Gestion des exceptions
8. 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.
Introduction au débogage8
Professeur: Hamza SAID
Débogage et Gestion des exceptions
9. Le passage en mode break se fait en appuyant sur le bouton
« Interrompre tout » ou en créant un point d’arrêt.
On va voir:
1. Comment définir un point d'Arrêt
2. L'instruction « Stop »
3. Les outils de débogage
Travailler en mode « Break »9
Professeur: Hamza SAID
Débogage et Gestion des exceptions
10. • Pour définir un point d'arrêt en mode « Design », il suffit de cliquer dans la bande grise située dans la partie
gauche de la fenêtre de code, devant la ligne de l'instruction voulue.
• La ligne d'un point d'arrêt est affichée en marron est précédée d'un point de la même couleur
• Un point d'Arrêt se retire de la même manière qu'il se définit (cliquez sur le point marron situé en début de ligne)
• Les points d'arrêt ne sont pas pris en compte lors de la génération de l'application finale
Comment définir un point d'Arrêt10
Professeur: Hamza SAID
Travailler en mode « Break »
12. • L'instruction « Stop » permet aussi d'interrompre l'application
• Exemple:
L'instruction « Stop »12
Professeur: Hamza SAID
Travailler en mode « Break »
Dim Multiplication(10, 10) As Integer
Dim i, j As Integer
For i = 1 To 10
For j = 1 To 10
'S'arrêter lorsqu'on calcul un multiple de 5
If i = 5 Or j = 5 Then Stop
Multiplication(i, j) = i * j
Next
Next
13. • Attention :
• Cette instruction est prise en compte après compilation.
• Il faut la supprimer avant de générer l'application finale.
• Ou utiliser une constante nommée « DEBUG » qui aura la valeur « True » si on
est en mode « Debug ».
L'instruction « Stop »13
Professeur: Hamza SAID
Travailler en mode « Break »
#If DEBUG Then
Stop
#End If
Ici « Stop » se produira uniquement si on est en mode « Debug ».
En mode « Run », il n'y aura pas d'arrêt.
14. • Accessible soit par le menu « Déboguer » soit par la barre d'outils
« Standard »
• Ils offrent les fonctionnalités suivantes:
Les outils de débogage14
Professeur: Hamza SAID
Travailler en mode « Break »
15. Les outils de débogage15
Professeur: Hamza SAID
Travailler en mode « Break »
Bouton Description
Lancer/Continuer Lance ou redémarre l'exécution de l'application en mode Run
Interrompre tout Passe du mode Run au mode Break
Arrêter le débogage Retour au mode Design
Pas à pas détaillé Exécute l'instruction suivante. Si l'instruction comporte un appel de procédure, l'exécution se poursuit en mode
Break dans la procédure appelée.
Pas à pas principal Se comporte comme l'outil "Pas à pas détaillé" tant qu'aucun appel de procédure n'est rencontré. Si
l'instruction comporte un appel de procédure, cette dernière sera exécutée normalement comme s'il s'agissait
d'une seule instruction. L'exécution se poursuit en mode break.
Pas à pas sortant Relance l'exécution du code jusqu'à la fin de la procédure en cours. L'exécution se poursuit en mode break
dans la procédure appelante.
16. Les outils de débogage16
Professeur: Hamza SAID
Démonstration
17. • Nous permettent de suivre le comportement ainsi que
vérifier le contexte d’exécution des applications
• Ils sont accessibles à partir de la barre d'outils
« Débogage »
Les fenêtres de débogage17
Professeur: Hamza SAID
Débogage et Gestion des exceptions
18. • Raccourcis CTRL + ALT + B
• Utilisée pour:
• ajouter et modifier les propriétés des points d'arrêts (condition du point
d'arrêt ou nombre de passages) grâce au menu contextuel
• Désactiver/réactiver des points d'arrêt
La fenêtre « Points d'arrêt »18
Professeur: Hamza SAID
Les fenêtres de débogage
19. La fenêtre « Points d'arrêt »19
Professeur: Hamza SAID
Démonstration
20. • Raccourcis CTRL + ALT + V, A
• Affiche les variables utilisées dans l'instruction en
cours.
La fenêtre « Automatique »20
Professeur: Hamza SAID
Les fenêtres de débogage
21. La fenêtre « Automatique »21
Professeur: Hamza SAID
Démonstration
22. • Raccourcis CTRL + ALT + V, L
• Affiche le contexte d'exécution (l'ensemble des
variables locales, arguments et objets) de la
procédure en cours.
La fenêtre « Variables locales »22
Professeur: Hamza SAID
Les fenêtres de débogage
23. La fenêtre « Variables locales »23
Professeur: Hamza SAID
Démonstration
24. • Raccourcis CTRL + G
• Autorise l'exécution d'une instruction saisie
manuellement ou l'évaluation de toute expression
valide saisie à la suite d'un point d'interrogation
La fenêtre « Immédiat »24
Professeur: Hamza SAID
Les fenêtres de débogage
25. La fenêtre « Immédiat »25
Professeur: Hamza SAID
Démonstration
26. • Permet d'afficher en permanence l'évolution d'une
expression particulière en la définissant en tant qu'espion
• L'ajout des espions se fait grâce au menu "DéboguerEspion
Express...". La fenêtre Espion s'ouvre par la suite
automatiquement.
La fenêtre « Espion »26
Professeur: Hamza SAID
Les fenêtres de débogage
27. La fenêtre « Espion »27
Professeur: Hamza SAID
Démonstration
28. • Pour gérer les erreurs dans les versions précédentes de Visual Basic
utilisaient les instructions:
• « On Error Resume Next »
• et « On Error Goto ».
• L'usage du « Goto » est assimilé à une programmation non structurée
• Entraîne des Bugs de logique
• C++ et Java... disposaient depuis toujours d'une approche structurée
basée sur les instructions « Try Catch » et « Finally »
La notion d'exception28
Professeur: Hamza SAID
Débogage et Gestion des exceptions
29. • Les instructions « Try Catch » et « Finally » existent maintenant dans Visual
Basic .NET
• La nouvelle terminologie pour la gestion des erreurs dans Visual Basic
.NET et la gestion des exceptions
• Puisqu'une erreur d'exécution se traduit par le fait que le Framework « lève une exception ».
La notion d'exception29
Professeur: Hamza SAID
Débogage et Gestion des exceptions
30. Quand une exception est levée, en absence de gestionnaire d'exception dans
une procédure,
• elle est automatiquement retransmise à la prochaine procédure
appelante dans la pile des appels.
• Si cette procédure possède un gestionnaire, l'exception est alors traitée.
• Sinon, elle est de nouveau retransmise à la procédure appelante jusqu'à ce qu'un gestionnaire soit
rencontré.
• Si aucun gestionnaire n'a pu intercepter l'exception ainsi levée,
l'application se terminera brutalement en affichant le message descriptif
de l'exception.
Transmission des exceptions30
Professeur: Hamza SAID
La notion d'exception
31. Soit l'exemple suivant:
L'nstruction « Try Catch »31
Professeur: Hamza SAID
La notion d'exception
Dim sr As New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Si le fichier "C:tempmonfichier.txt" est occupé ou n'existe
pas, une exception sera levée (Affichage d'un message
d'erreur et arrêt brutal de l'application).
32. Lorsqu'une instruction (ou bloc d'instructions) est susceptible
de lever une exception, elle doit être prise en charge dans
un bloc Try Catch End Try.
L'nstruction « Try Catch »32
Professeur: Hamza SAID
La notion d'exception
Dim sr As StreamReader
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Catch ex As Exception
MsgBox("L'opération a échoué")
End Try
Maintenant, un message sera
affiché au lieu de l'arrêt brutal
de l'application
Codeà
gérer
Codeà
exécuter
aprèsla
détection
d’uneerreur
33. • Les exceptions sont des objets dérivés de la classe « System.Exception »
• Principaux membres de cette classe:
La classe « Exception »33
Professeur: Hamza SAID
La notion d'exception
Membre Description
Propriétés
HelpLink Lien vers le fichier d'aide associé à l'exception.
InnerException Instance de l'objet exceptions qui a provoqué l'exception
Message Message descriptif de l'exception
Source Nom de l'application ou de l'objet qui est à l'origine de l'erreur
StackTrace
Représentation sous forme de chaînes de la pile des appels au moment où
l'exception en cours a été levée.
TargetSite Méthode qui a levé l'exception
Méthodes
GetBaseException En cas de substitution dans une classe dérivée, retourne l'objet Exception de base.
34. • Dans l'exemple précédent, voici comment afficher la description de
l'exception avec la propriété 'Message'.
La classe « Exception »34
Professeur: Hamza SAID
La notion d'exception
Dim sr As StreamReader
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
35. • La classe « Exception » est, en réalité, une classe de base
pour les différents types d'exception levée par le
Framework
• « StackOverFlowException » et
« FileNotFoundException » sont un exemple d'exception
dérivée de la classe « Exception »
• Ces classes filles sont réparties parmi les différents
espaces de nom du Framework.
• l'exception « DivideByZeroException » par exemple, est levée par la classe
principale « System »
• l'exception « DirectoryNotFoundException » est levée par la classe « System.IO »
Les classes d'exceptions dérivées35
La notion d'exception
Professeur: Hamza SAID
36. • On peut affiner les gestionnaires d'exception en alignant successivement
plusieurs instructions « Catch ». Chacune d'elles chargée de capturer et
de traiter un type d'exception spécifique.
Les classes d'exceptions dérivées36
La notion d'exception
Dim sr As StreamReader
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Catch ex As DirectoryNotFoundException
MsgBox("Dossier invalide")
Catch ex As FileNotFoundException
MsgBox("Ouverture du fichier impossible")
Catch ex As Exception
MsgBox(ex.Message)
End Try
Professeur: Hamza SAID
Cas où le répertoire
n’existe pas
Cas où le fichier
n’existe pas
Le reste des erreurs
37. • Un traitement peut avoir consommé
des ressources qui doivent être
libérées
• les instructions chargées d'effectuer
les opérations de libération devront
prendre place à la suite du mot
réservé « Finally »
• le bloc « Finally » est toujours
exécuté que le traitement se termine
normalement ou en levant une
exception
L'instruction « Finally »37
Professeur: Hamza SAID
La notion d'exception
Dim sr As StreamReader = Nothing
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
Catch ex As DirectoryNotFoundException
MsgBox("Dossier invalide")
Catch ex As FileNotFoundException
MsgBox("Ouverture du fichier impossible")
Catch ex As Exception
MsgBox(ex.Message)
Finally
If sr IsNot Nothing Then
sr.Close()
End If
MsgBox("Fin du traitement")
End Try
38. • Il permet la transmission d'une exception à la procédure
appelante dans le cas d'une chaîne d'appels
Le mot clé « Throw »38
Professeur: Hamza SAID
La notion d'exception
Dim sr As StreamReader
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Catch ex As Exception
Throw
End Try
39. • Elle permet aussi la personnalisation du message d'exception.
Le mot clé « Throw »39
Professeur: Hamza SAID
La notion d'exception
Dim sr As StreamReader
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Catch ex As Exception
Throw New Exception("L'opération a échoué")
End Try
40. • La personnalisation du message associé à une exception ne permet
plus de connaître la véritable cause de sa levée.
• Mais, on peut retransmettre l'objet « Exception » original à la
procédure appelante.
Le mot clé « Throw »40
Professeur: Hamza SAID
La notion d'exception
Dim sr As StreamReader
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Catch ex As Exception
Throw New Exception("L'opération a échoué", ex)
End Try
41. • La personnalisation du message associé à une exception ne permet
plus de connaître la véritable cause de sa levée.
• Mais, on peut retransmettre l'objet « Exception » original à la
procédure appelante.
Le mot clé « Throw »41
Professeur: Hamza SAID
La notion d'exception
Dim sr As StreamReader
Try
sr = New StreamReader("C:tempmonfichier.txt")
Do Until sr.Peek = -1
Debug.WriteLine(sr.Read)
Loop
sr.Close()
Catch ex As Exception
Throw New Exception("L'opération a échoué", ex)
End Try
Dans ce cas, la propriété
« InnerException » de la
classe « Exception »
fournit une référence en
lecture seule à l'exception
sous-jacente.
42. On a vu :
• Comment travailler en mode break
• Comment utiliser les points d'arrêt et l'instruction « Stop »
• Les outils de débogage
• Les fenêtres de débogage (Points d'arrêt, Automatique,
Variables locales, Immédiat et Espion)
• Comment gérer les exceptions grâce au bloc « Try
Catch »
En bref42
Professeur: Hamza SAID
Débogage et Gestion des exceptions