Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Exceptions. 2 Nordjyllands Erhvervakademi – 2009 Objectives “Unfortunately, errors are a part of life. Some are detected by the compiler, some are detected.

Lignende præsentationer


Præsentationer af emnet: "Exceptions. 2 Nordjyllands Erhvervakademi – 2009 Objectives “Unfortunately, errors are a part of life. Some are detected by the compiler, some are detected."— Præsentationens transcript:

1 Exceptions

2 2 Nordjyllands Erhvervakademi – 2009 Objectives “Unfortunately, errors are a part of life. Some are detected by the compiler, some are detected by the CLR, and the remainder go uncaught. C# and Visual Studio.NET provide many techniques for quickly identifying, dealing with, and eliminating errors. But you have to apply them…” Debugging i Visual Studio Exception handling i C# Applikationsdesign

3 3 Nordjyllands Erhvervakademi – 2009 Del 1 Debugging i Visual Studio…

4 4 Nordjyllands Erhvervakademi – 2009 Debugging i Visual Studio To metoder: –print debugging –source-level debugger tilgængelig i IDE I den første kan alle være med Den sidste er meget mere kraftfuld

5 5 Nordjyllands Erhvervakademi – 2009 Print debugging Fra en compileret application: –Console.WriteLine eller MessageBox.Show Hvis du kører i Visual Studio: –System.Diagnostics.Debug.WriteLine skriver til Output vinduet

6 6 Nordjyllands Erhvervakademi – 2009 Source-level debugger Mange features: –pause program et hvilket som helst sted –step-by-step exekvering –se indhold af variable, objekter, datastrukturer –vis metodekalds stak –etc. Hvordan bruges den? 1.sæt et breakpoint for at stoppe program 2.se Debug menu

7 7 Nordjyllands Erhvervakademi – 2009 Sæt breakpoints Det letteste er at klikke i venstre margin af source koden Andre muligheder: –se Debug >> New Breakpoint… –du kan breake når data ændres, eller med en betingelse, eller …

8 8 Nordjyllands Erhvervakademi – 2009 Debug menu Step-by-step eksekvering –step into –step over –step out of View locals Immediate window

9 9 Nordjyllands Erhvervakademi – 2009 Debugging vs. Exception Handling Debugging er reactive –den hjælper dig med at identificere og rette errors efter de opstår –i.e. program er gået ned, vil gå ned, eller giver forkerte resultater Exception handling er proactive –baseret på tanken at nogle fejl kan håndteres –i.e. program opfanger fejl, retter problemet, og bliver ved med at køre

10 10 Nordjyllands Erhvervakademi – 2009 Del 2 Exception handling i C#…

11 11 Nordjyllands Erhvervakademi – 2009 Exceptions Exception = undtagelse Et signal for at en undtagelses tilstand er opstået Examples: –divide-by-zero –arithmetic overflow –array access out of bounds –null object reference –file not found –database server unreachable

12 12 Nordjyllands Erhvervakademi – 2009 Exception typer Hver exception type er defineret med en klasse i FCL To hovedkategorier: –System.SystemException –System.ApplicationException System.Exception System.SystemException System.ApplicationException system-defined exceptions user-defined exceptions

13 13 Nordjyllands Erhvervakademi – 2009 Exception handling Først skal du vurdere hvilke exceptions der kan opstå Så skal du beslutte hvilke du vil håndtere Dernæst skal du skrive koden, der håndterer den givne exception Bemærk: –exception handling er valgfri –god exception handling er svært

14 14 Nordjyllands Erhvervakademi – 2009 Hvad nu, hvis du ikke håndterer en exception? CLR skriver en meddelse, hvor brugeren kan vælge at forsætte eller afbryde Eksempel: –Dit program prøver at åbne en fil, der ikke findes System.IO.FileStream file; file = new System.IO.FileStream("C:\\readme.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read);

15 15 Nordjyllands Erhvervakademi – 2009 Exception handling i C# Gøres med try-catch –prøv (try) at udføre en eller flere linier –fang (catch) de exceptions som måtte komme try { // to perform one or more tasks, which might raise an exception… } catch(Exception ex) { // if anything goes wrong, we end up down here to handle it… } exception

16 16 Nordjyllands Erhvervakademi – 2009 Eksempel Prøv at åbne filen fra før… try { System.IO.FileStream file; file = new System.IO.FileStream("C:\\readme.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read);. file.Close(); } catch(Exception ex) { MessageBox.Show("Error: " + ex.Message); }

17 17 Nordjyllands Erhvervakademi – 2009 Semantikken i try-catch Control flows i en af to veje: –ingen exception opstår:vi springer Catch blokken over –exception opstår:Der hoppes til Catch med det samme try { statement1 statement2 statement3 } catch(Exception ex) { statement4 statement5 } statement6 no exception statement1 fails

18 18 Nordjyllands Erhvervakademi – 2009 Forandring i default control flow Efter at have fanget en exception, kan du: –håndtere exception’en & fortsætte afvikling af programmet –kaste exception’en videre, fordi du ikke kunne håndtere den –afslutte programmet try {. } catch(Exception ex) { throw ex; // rethrow exception to caller }

19 19 Nordjyllands Erhvervakademi – 2009 Oprydning For at sikre oprydning, brug try-catch-finally Finally blokken køres altid efter try eller catch… System.IO.FileStream file = null; try { file = new System.IO.FileStream("C:\\readme.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read);. } catch(Exception ex) { throw ex; } finally { // ensure file is closed if (file != null) file.Close(); }

20 20 Nordjyllands Erhvervakademi – 2009 Del 3 Applikationsdesign…

21 21 Nordjyllands Erhvervakademi – 2009 Exception udbredelse Hvad sker der når en Exception bliver kastet? –Den sendes gennem kæden af metodekald, for at en eller anden skal håndtere den –Hvis ingen håndterer den, fanger CLR den og lukker programmet Main()One()Two()Three()CLR call sequence exception thrown in Three, call stack is unwound in search for handler…

22 22 Nordjyllands Erhvervakademi – 2009 Hvordan ved du hvilken exception, der er kastet? Exception typen er bestemt af objekt typen… –du kan bruge is operator –du kan bruge multiple catch blokke, prioriteret top-down… try {. } catch(System.IO.FileNotFoundException ex) {... } catch(System.ArithmeticException ex) {... } catch(Exception ex) { // generic catch-all... }

23 23 Nordjyllands Erhvervakademi – 2009 Klasse design Klasser bør bruge try-catch-finally Hvis en exception opstår: –klasser bør ikke kommunikere med brugeren –De bør kaste deres egne custom exceptions try {. } catch(Exception ex) { throw new MyCustomException("...", ex); }

24 24 Nordjyllands Erhvervakademi – 2009 Applicationsdesign I det mindste bør programmet fange, logge og afslutte hvis en exception opstår –gøres let i Main metoden… public static void Main() { try { // run GUI app… Application.Run( new Form1() ); } catch(Exception ex) { System.Diagnostics.EventLog.WriteEntry("MyApp", ex.Message); System.Diagnostics.EventLog.WriteEntry("MyApp", ex.StackTrace); MessageBox.Show("Halting due to error: " + ex.Message); }

25 25 Nordjyllands Erhvervakademi – 2009 Opsummering Fejl opstår desværre i programmer Nogle kan du håndtere, andre kan du ikke C# tilbyder rimelig understøttelse af exception handling –på niveau med andre sprog Bemærk! –sværere end det ser ud til –et godt design kræver en betydelig indsats –glem ikke at teste!


Download ppt "Exceptions. 2 Nordjyllands Erhvervakademi – 2009 Objectives “Unfortunately, errors are a part of life. Some are detected by the compiler, some are detected."

Lignende præsentationer


Annoncer fra Google