Debuggen Hoofdstuk 9 Hoofdstuk 9.

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

ADS Verborgen bestanden (stromen) Cum 13 juli 2008 Rudiger.
Gegevensstructuren: list boxen en lijsten
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
JAVA1 H 1. KENNISMAKING MET JAVA EN DE ONTWIKKELOMGEVINGEN 1. ONTSTAANSGESCHIEDENIS VAN JAVA Java: ontworpen in 1990 door Sun Microsystems voor de programmering.
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
Inleiding Programmeren met Visual Basic Karl Moens.
Instructie Programmeren Debuggen 5JJ70. Debuggen: Wat is het probleem Je programma compileert, maar werkt niet zoals verwacht, wat nu? Vraag je af: wat.
Hoofdstuk 2 Hallo, C# !.
De koektrommel of de grabbelton
‘Inleiding programmeren in Java’ Derde college Maandag 22 januari 2001 drs. F. de Vries.
Exceptions Hoofdstuk 17 Hoofdstuk 17.
Klassen schrijven Hoofdstuk 10. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe schrijf je een klasse Constructormethodes Public methoden Variabelen.
Herhaling: For, While en Do
Overerving Hoofdstuk 11 Hoofdstuk 11.
Methoden en argumenten
Visual Basic .NET voor studenten
Consoleprogramma’s Hoofdstuk 19. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe consoletoepassingen maken In- en uitvoer bij consoleprogramma’s.
Bestanden Hoofdstuk 18 Hoofdstuk 18.
Subversion Version control
Visual Basic.Net - Overzicht
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Looking at Code Size and Performance Kevin Muys.  Hoe efficiënt is C++ vergeleken met C  Hoe beïnvloed C++ het benodigde geheugen  Oplossingen voor.
Microsoft Windows Vista vanuit gebruikersperspectief.
Operating Systems Informatica.
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Deel XXI 1 Internetapplicaties Internetprogrammeren Capita Selecta.
Web Applicaties Bouwen met Visual Studio .NET
Windows Applicaties Bouwen met Visual Studio.NET Sijmen Koffeman Development Consultant Microsoft.
Debugging en Tracing met Visual Basic.NET André Obelink, MCSD Visual Basic Groep.
Visual Basic 2010 – What’s new André Obelink
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Testen Hoofdstuk 22. Visual Basic.NET voor studenten2 Inleiding Testen hebben als doel het ontdekken van bugs Het is echter onmogelijk om met testen te.
Visual Basic.NET voor studenten De VB- ontwikkelomgeving Hoofdstuk 2.
Programmeerstijl Hoofdstuk 21. Visual Basic.NET voor studenten2 Inleiding Belang van een goede programmeerstijl:  Programma’s worden door meerdere mensen.
Les 2: Interactie in je space door middel van klikbare objecten en actionscript. Wat is actionscript en programmeren?
Arrays Hoofdstuk 14 Hoofdstuk 14.
Objectgeoriënteerd Ontwerp
TypeScript Orde in de chaos!. Over mij Patrick Schmidt (Microsoft Certified Trainer) Trainer bij 4DotNet Mede-oprichter en architect BesteProduct.nl.
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Les 4 De Muis (deel 1) Programmeren met Visual Basic Karl Moens.
Variabelen en berekeningen
Hoofdstuk 3 - Conditionele logica
Tweedimensionale arrays
1 Introductie next MCT - Programmeren 2 © S. Walcarius Waarom java? programma machinetaal (.exe) compilen platformspecifiek Een exe programma.
Programmeercursus O.O.P. met VISUAL BASIC.NET
PLANNING EN DESIGN MET VSTS2010 Lunchsessie ALM René van Osnabrugge
Polymorphisme en Interfaces: inleiding
Programmeren.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
Automatische builds vanuit ClearCase UCM 1 Visual & Integrated Build Engine Automatische builds vanuit ClearCase en UCM Download ClearVibe Light Download.
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
Windows key uitlezen Op welke manier kunnen we de windows key uitlezen
EMSE 20 oktober 2015 Verlichting, het Internet of Things en ARM mbed 3.0 Klaas de Waal.
OOP en.NET. Objecten Is geen ‘nieuw’ mysterieus woord Overal om ons heen zien we objecten: – TV – Computer – Auto – Wasmachine – ….
Functional Web Applications Implementation and Use of Client-Side Interpreters Jan Martin Jansen.
C++ Les 1: introductie. Programmeren Programma’s scripts Websites libraries (Sound, GUI, netwerking…)
Windows applicatieontwikkeling
De programmeertaal C++
Gameprogrammeren: Programmastructuur
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
– Software development fundamentals
Java Masterclass Sar Maroof.
Windows applicatieontwikkeling
Software Development fundamentals
Software Development fundamentals
Netwerken & Internet 1.
Transcript van de presentatie:

Debuggen Hoofdstuk 9 Hoofdstuk 9

Visual Basic.NET voor studenten In dit hoofdstuk … Verschillende typen programmeerfouten Gebruik van de debugger Breakpoints en single stepping Veelvoorkomende fouten Optioneel (appendix): het .NET uitvoeringsmodel Visual Basic.NET voor studenten

Visual Basic.NET voor studenten Inleiding Bug = fout in een programma Hoe opsporen? Primitieve hulpmiddeltjes MessageBox.Show(…) Debugger Stap voor stap door het programma lopen en de inhoud van variabelen bekijken Lezen van broncode (“Code reading”) Programmeurs checken mekaars code en trachten zo fouten eruit te halen Inspecteren van 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 Visual Basic.NET voor studenten Hoofdstuk 9

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! Visual Basic.NET voor studenten Hoofdstuk 9

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 Visual Basic.NET voor studenten Hoofdstuk 9

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? Visual Basic.NET voor studenten Hoofdstuk 9

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 Visual Basic.NET voor studenten Hoofdstuk 9

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) Visual Basic.NET voor studenten Hoofdstuk 9

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 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 Hoofdstuk 9

Demo: de debugger gebruiken Breakpoints Watch window Single Stepping Case Study  Doe dit zelf aan de hand van de tekst in het handboek Visual Basic.NET voor studenten Hoofdstuk 9

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 Visual Basic.NET voor studenten Hoofdstuk 9

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. Visual Basic.NET voor studenten Hoofdstuk 9

.NET Framework Class Library Support 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 Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten 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: System (altijd aanwezig, basisklassen) System.Console (schrijven naar DOS vensters) System.Windows.Forms (Formulieren en Controls) System.Drawing (tekenen) Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten Namespaces System Collections IO Security Runtime Configuration Net ServiceProcess .InteropServices Diagnostics Reflection Text .Remoting Globalization Resources Threading .Serialization Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten 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) Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten Assemblies Visual Basic.NET voor studenten Hoofdstuk 9

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 Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten 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! Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten Compilatie: vbc vbc /noconfig /target:exe HelloApp.vb Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten Compilatieprobleem 1 Option Explicit On Option Strict On Imports 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 Imports System VS gaat op project niveau standaard een aantal Namespaces importeren (bv. System) Hier moet dit manueel ingegeven worden in het bronbestand Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten Uitvoering Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten 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? Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten Een Forms programma Option Explicit On Option Strict On Imports System.Windows.Forms Public Class HelloApp2 Public Shared Sub Main() MessageBox.Show("Hallo, een VB.NET programma") End Sub End Class Imports System Imports System.Windows.Forms Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten 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) Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten 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 Visual Basic.NET voor studenten Hoofdstuk 9

Visual Basic.NET voor studenten 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! Visual Basic.NET voor studenten