Inleiding tot het gebruik van graphics
Download
Report
Transcript Inleiding tot het gebruik van graphics
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