Inleiding tot het gebruik van graphics

advertisement
Debuggen
Hoofdstuk 9
In dit hoofdstuk …
Verschillende typen programmeerfouten
 Gebruik van de debugger
 Breakpoints en single stepping
 Veelvoorkomende fouten
 Optioneel (appendix): het .NET
uitvoeringsmodel

Hoofdstuk 9
Visual Basic.NET voor studenten
2
Inleiding


Bug = fout in een programma
Hoe opsporen?

Primitieve hulpmiddeltjes


Debugger


Programmeurs checken mekaars code en trachten zo fouten eruit te halen
Inspecteren van



Stap voor stap door het programma lopen en de inhoud van variabelen bekijken
Lezen van broncode (“Code reading”)


MessageBox.Show(…)
Log bestanden: dit zijn tekstbestanden die een programma genereert tijdens de
uitvoering.
Core dump: als een programma crasht, dan genereert het een bestand met daarin de
volledige toestand van de processor, geheugen, etc.
Oplossen van bugs is voor omvangrijke programma’s geen eenvoudige taak
en is een discipline op zich
Hoofdstuk 9
Visual Basic.NET voor studenten
3
Debuggen: enkele bemerkingen

Fouten opsporen is soms erg moeilijk
 Bv.
een programma met 10 Timers gedraagt zich
iedere keer weer anders.
 Of een crash zich voordoet hangt soms af van
omgevingsfactoren, bv. wel of geen
netwerkverbinding
 Een debugger is niet altijd bruikbaar: bv. een
programma met 10 Timer objecten kan je niet
stilzetten om stap voor stap te doorlopen. Meer nog,
soms zijn bugs “verdwenen” precies omdat je de code
stap voor stap uitvoert!
Hoofdstuk 9
Visual Basic.NET voor studenten
4
Debuggen: enkele bemerkingen

Fouten oplossen is soms nog moeilijker
 Je
weet in welk stuk code de fout zich voordoet, je wil
deze code veranderen
 Introduceer je geen nieuwe bugs in deze code?
 Introduceer je geen nieuwe bugs in andere stukken
code precies omdat je deze code hebt veranderd?
 Soms is het beter gewoon met een work-around te
werken. Je verandert de code niet, maar voorziet toch
een oplossing door bijvoorbeeld een andere manier te
geven om hetzelfde te bereiken
Hoofdstuk 9
Visual Basic.NET voor studenten
5
Debuggen: enkele bemerkingen

Je hebt de fout opgelost: hoe bereik je nu
je klanten?
 Patches
op het internet
 Service packs
…

Probleem: voor welke versies werken
deze patches en voor welke versies levert
dit juist nieuwe problemen?
Hoofdstuk 9
Visual Basic.NET voor studenten
6
Waar kunnen bugs ontstaan?

Compilatie (at compile time)
 Syntaxfouten
 Altijd:


Option Strict On
Option Explicit On
 Dit
zijn de “eenvoudigste” fouten omdat een compiler
je de foutenboodschap geeft
 Met een goede IDE (zoals Visual Studio) krijg je zelfs
tijdens het typen onmiddellijk feedback
Hoofdstuk 9
Visual Basic.NET voor studenten
7
Waar kunnen bugs ontstaan?

Koppelen (at link time)
 Dit
is een mechanisme om andere (binaire)
code met het eigenlijke programma te
verbinden
 Bijvoorbeeld: MessageBox.Show(…)
Waar is de code voor MessageBox?
 Op welke manier wordt dit “at runtime” gevonden?
  .NET Managed Execution Environment
(appendix)

Hoofdstuk 9
Visual Basic.NET voor studenten
8
Waar kunnen bugs ontstaan?

Uitvoering (at runtime)



Dit zijn de feitelijke “bugs” die vaak moeilijk te vinden en/of op te
lossen zijn
Soms krijg je foutboodschappen (Exceptions)
Soms krijg je onverwacht/verkeerd gedrag


Deterministisch: je kan precies aangeven wanneer en in welke
omstandigheden de fout zich voordoet
Indeterministisch: de fout doet zich soms voor en dan weer niet, je
kan geen precieze omschrijving geven wanneer en hoe de fout
optreedt

Hoofdstuk 9
Voorbeeld: een “memory leak”: als een programma voortdurend
geheugen verbruikt en niets vrijgeeft gaat het na een tijd crashen, maar
het precieze tijdstip is afhankelijk van het gebruik en de reeds
aanwezige vrije ruimte
Visual Basic.NET voor studenten
9
Demo: de debugger gebruiken
Breakpoints
 Watch window
 Single Stepping
 Case Study  Doe dit zelf aan de hand
van de tekst in het handboek

Hoofdstuk 9
Visual Basic.NET voor studenten
10
Appendix: .NET Uitvoeringsmodel

Het hele “.NET Framework” bestaat uit verschillende componenten
VB
C++
C#
Perl Python
…
Web Services
User Interface
ASP.NET
ADO.NET: Data and XML
.NET Framework Class Library
Common Language Runtime
Message
Queuing
COM+
(Transactions, Partitions,
Object Pooling)
IIS
WMI
Win32
Hoofdstuk 9
Visual Basic.NET voor studenten
11
Common Language Runtime

.NET programma’s worden gecompileerd naar bytecode
(MSIL)


MSIL = MicroSoft Intermediate Language
Deze bytecode wordt door de Common Language
Runtime uitgevoerd
.NET programma’s zijn dus geen volledige native applicaties
(zoals bijvoorbeeld vroegere C++ programma’s)
 Dit model biedt echter verschillende voordelen, waaronder
betere beveiliging, platformonafhankelijkheid, betere integratie
van verschillende programmeertalen, enz.
Hoofdstuk 9
Visual Basic.NET voor studenten
12
CLR componenten
.NET Framework Class Library Support
Thread Support
COM Marshaler
Type Checker
Exception Manager
Security Engine
Debugger
MSIL to Native
Compilers
Code
Manager
Garbage
Collection
Class Loader
Hoofdstuk 9
Visual Basic.NET voor studenten
13
Namespaces



Groeperen de bibliotheekklassen van de .NET
Framework Class library
Je kan zelf ook Namespaces maken om de
klassen van je eigen programma’s logisch te
groeperen
Voorbeelden:




Hoofdstuk 9
System (altijd aanwezig, basisklassen)
System.Console (schrijven naar DOS vensters)
System.Windows.Forms (Formulieren en Controls)
System.Drawing (tekenen)
Visual Basic.NET voor studenten
14
Namespaces
System
Collections
IO
Security
Configuration
Net
ServiceProcess
.InteropServices
Diagnostics
Reflection
Text
.Remoting
Globalization
Resources
Threading
.Serialization
Hoofdstuk 9
Visual Basic.NET voor studenten
Runtime
15
Assemblies

Binaire code (MSIL code) wordt logisch
gebundeld
 Dikwijls
per namespace, alhoewel niet
verplicht
 Elke assembly heeft een bepaalde versie
 Fysisch: .dll bestand
 Locatie: GAC (Global Assembly Cache)
Hoofdstuk 9
Visual Basic.NET voor studenten
16
Assemblies
Hoofdstuk 9
Visual Basic.NET voor studenten
17
Compileren via de prompt



Alles wat via Visual Studio mogelijk is, kan ook
gebeuren via de command prompt
Dit is nuttig wanneer je zeer grote programma’s
moet compileren, waarvan de compilatietijd
soms uren kan duren. Dit kan dan automatisch
gebeuren (bv. ‘s nachts)
Het helpt bij het begrijpen wat de verschillende
stappen zijn bij het maken van een uitvoerbaar
programma
Hoofdstuk 9
Visual Basic.NET voor studenten
18
Een simpel programma
Option Explicit On
Option Strict On
Public Class HelloApp
Public Shared Sub Main()
Console.WriteLine("Hallo, een VB.NET programma")
End Sub
End Class



Open Notepad en tik bovenstaande in
Bewaar als “HelloApp.vb”
Open (Onder VS.NET tools) de “VS.NET Command
Prompt”, dus geen gewoon DOS venster!
Hoofdstuk 9
Visual Basic.NET voor studenten
19
Compilatie: vbc
vbc /noconfig /target:exe HelloApp.vb
Hoofdstuk 9
Visual Basic.NET voor studenten
20
Compilatieprobleem 1
Option Explicit On
Option Strict On
Imports
Imports System
System ‘ Manuele import, Console wordt nu gevonden
Public Class HelloApp2
Public Shared Sub Main()
Console.WriteLine("Hallo, een VB.NET programma")
End Sub
End Class


VS gaat op project niveau standaard een aantal
Namespaces importeren (bv. System)
Hier moet dit manueel ingegeven worden in het
bronbestand
Hoofdstuk 9
Visual Basic.NET voor studenten
21
Uitvoering
Hoofdstuk 9
Visual Basic.NET voor studenten
22
Een Forms programma
Option Explicit On
Option Strict On
Public Class HelloApp2
Public Shared Sub Main()
MessageBox.Show("Hallo, een VB.NET programma")
End Sub
End Class


Welke Namespaces voegt VS toe voor elke Windows Applicatie?
In welke Namespace bevindt zich de MessageBox klasse?
Hoofdstuk 9
Visual Basic.NET voor studenten
23
Een Forms programma
Option Explicit On
Option Strict On
Imports
Imports System
System.Windows.Forms
Imports System.Windows.Forms
Public Class HelloApp2
Public Shared Sub Main()
MessageBox.Show("Hallo, een VB.NET programma")
End Sub
End Class
Hoofdstuk 9
Visual Basic.NET voor studenten
24
Compileren


De broncode is juist, maar de binaire code voor MessageBox wordt niet
gevonden
Je moet meegeven met welke assembly deze applicatie gekoppeld moet
worden (cfr bugs tijdens het koppelen)
Hoofdstuk 9
Visual Basic.NET voor studenten
25
Compilatieprobleem 2
vbc /noconfig /target:exe /reference:System.Windows.Forms.dll
HelloApp3.vb
Of
vbc /noconfig /target:winexe /reference:System.Windows.Forms.dll
HelloApp3.vb



/reference  koppelen aan een assembly
/target:exe  maak een programma dat vanuit een console venster opgeroepen
wordt
/target:winexe  maak een programma dat dmv dubbelklik in Explorer kan
opgeroepen worden
Hoofdstuk 9
Visual Basic.NET voor studenten
26
De optie /noconfig




In alle vorige commando’s meegegeven
Betekenis: geen standaard bibliotheekklassen
importeren
Als je deze optie dus weglaat, hoef je geen
/reference te doen, omdat dit automatisch zal
gebeuren
Omwille van didactische redenen hebben we
/noconfig toegevoegd, maar door het weg te
laten worden de commando’s veel korter!
Hoofdstuk 9
Visual Basic.NET voor studenten
27
Download