30
Leibniz Universität IT Services | Anja Aue C# - Einführung in die Programmiersprache Fehler abfangen

C++ - Einführung in die Programmierung · c# - Einführung | 29.06.12 Seite 16 Exception-Objekt Die oben angegebenen Anweisung fängt jede vorher nicht behandelte Ausnahme ab. Die

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Leibniz Universität IT Services | Anja Aue

C# - Einführung in die Programmiersprache

Fehler abfangen

c# - Einführung | 29.06.12 Seite 2

Fehler in einem Programm

Warnungen sind Hinweise auf eventuelle Fehler während der Laufzeit des Programms.

Syntaxfehler verhindern ein Starten des Programms. Logische Fehler und Laufzeitfehler führen zu einem unkontrollierten Abbruch des Programms oder liefern nicht das gewünschte Ergebnis.

c# - Einführung | 29.06.12 Seite 3

Syntaxfehler ...

entstehen durch ein Verstoß gegen die Grammatik einer Programmiersprache.

werden vom Compiler erkannt. Dem Nutzer wird die fehlerbehaftete Seite angezeigt.

verhindern die Ausführung des Programms.

werden in Visual Studio in einer Fehlerliste angezeigt.

c# - Einführung | 29.06.12 Seite 4

Fehlerliste in Visual Studio

c# - Einführung | 29.06.12 Seite 5

Syntaxfehler in C#

Beschreibung in der Fehlerliste.

Schlangenlinie im Code. Gelber Strich am linken

Rand des Codefensters. Falls die Maus über einer

Schlangenlinie liegt, wird bei nicht definierten Variablen etc. eine Fehlermeldung und ein Smarttag zur Behebung des Fehlers angezeigt.

c# - Einführung | 29.06.12 Seite 6

Smarttag nutzen

Eigenschaft einer Klasse erzeugen.

Passende Variable (Feld) erzeugen.

c# - Einführung | 29.06.12 Seite 7

Eigenschaften und Variablen

class Program{

public static string myVariable;

private static string myProperty;

static void Main(string[] args){

myVariable = "Text";

_myProperty = " Text ";

}

public static string _myProperty{

get { return myProperty; }

set { myProperty = value.Trim(); }

}

}

c# - Einführung | 29.06.12 Seite 8

Zeilennummern im Code anzeigen

Extras – Optionen.

Das Kontrollkästchen Alle Einstellungen anzeigen ist aktiv. Der Ordner Text-Editor – Alle Sprachen ist geöffnet. Das Kontrollkästchen Zeilennummern in dem Bereich Anzeigen

wird aktiviert.

c# - Einführung | 29.06.12 Seite 9

Laufzeitfehler (Run-Time-Error) ...

treten nach dem Starten des Programms auf. können zu einem Programmabsturz führen. sind Ausnahmen (Exceptions) in C#. können im Programm abgefangen werden.

c# - Einführung | 29.06.12 Seite 10

Exceptions ...

sind Ausnahmen, die in einem Programm abgefangen werden können.

reagieren auf einen bestimmten Zustand im Programm. können durch Klassenbibliotheken des .NET Frameworks oder

der Common Language Runtime ausgelöst werden. können von dem Programmierer selber ausgelöst werden.

c# - Einführung | 29.06.12 Seite 11

Beispiel: Anzeige im Debug-Modus

c# - Einführung | 29.06.12 Seite 12

Exceptions abfangen

Console.Write("Bitte geben Sie den Divident ein: ");

tmpZahl = Console.ReadLine();

try{

divident = double.Parse(tmpZahl);

ergebnis = divident / divisor;

}

catch (FormatException){

Console.WriteLine("Fehler");

}

catch (Exception exc){

Console.WriteLine( exc.Message);

}

finally{ }

c# - Einführung | 29.06.12 Seite 13

Versuche die Anweisungen auszuführen ...

try{

divident = double.Parse(tmpZahl);

ergebnis = divident / divisor;

}

Der try-Block wird in geschweifte Klammern eingeschlossen. Der Anweisungblock sammelt alle Anweisungen, die eventuell

eine Ausnahme erzeugen könnten. Sobald eine Ausnahme auftritt wird zu einem catch-Block

verzweigt. Alle nachfolgenden Anweisungen im try-Block werden nicht ausgeführt.

c# - Einführung | 29.06.12 Seite 14

Mögliche Fehler abfangen

Console.Write("Bitte geben Sie den Divident ein: ");

tmpZahl = Console.ReadLine();

try{

divident = double.Parse(tmpZahl);

ergebnis = divident / divisor;

}

catch (FormatException){

Console.WriteLine("Fehler");

}

catch (Exception exc){

Console.WriteLine( exc.Message);

}

c# - Einführung | 29.06.12 Seite 15

catch-Anweisung

Jede Ausnahme wird mit Hilfe des Schlüsselwortes catch eingefangen.

Der Anweisung wird in runden Klammern der Exception-Typ (siehe http://msdn.microsoft.com/de-de/library/%20z4c5tckx%28v=vs.80%29.aspx) übergeben. Optional kann wie in der zweiten Anweisung eine Variable angegeben werden.

In den geschweiften Klammern wird die Ausnahme behandelt.

catch (FormatException)

catch (Exception exc)

c# - Einführung | 29.06.12 Seite 16

Exception-Objekt

Die oben angegebenen Anweisung fängt jede vorher nicht behandelte Ausnahme ab.

Die Eigenschaft .Message des Objekts enthält Informationen zur Ausnahme.

Die Eigenschaft .Source des Objekts gibt die Assembly oder das Objekt an, in dem der Fehler aufgetreten ist.

Die Eigenschaft .TargetSite des Objekts liefert den Namen der Methode, in dem der Fehler aufgetreten ist.

catch (Exception exc){

Console.WriteLine( exc.Message);

}

c# - Einführung | 29.06.12 Seite 17

Weitere Hinweise

Es können beliebig viele catch-Blöcke definiert werden.

Aber ein catch-Block kann immer nur mit einem try-Block definiert werden.

Die catch-Blöcke werden in der umgekehrten Reihenfolge der Klassen-Hierarchie gebildet. Spezielle Ausnahmen stehen am Anfang, allgemeine Ausnahmen am Ende.

Falls die Ausnahme in keinen der angegebenen catch-Blöcke verarbeitet wird, wird diese eine Ebene höher gereicht.

c# - Einführung | 29.06.12 Seite 18

Hierarchie der Exceptions

Exception

System...

IO...

Application...

IndexOutOfRange...

Format...

Arithmetic...

DivideByZero...

Overflow...

c# - Einführung | 29.06.12 Seite 19

… werfen

if (divisor == 0)

{

throw new DivideByZeroException();

}

Mit Hilfe von throw kann eine Exception geworfen werden.

In diesem Beispiel wird eine neue Exception (new) aus einer Ausnahme der .NET Framework Klassenbibliothek erzeugt.

c# - Einführung | 29.06.12 Seite 20

Logische Fehler ...

entstehen durch ein fehlerhaftes Design eines Programms.

werden durch nicht vorhandenes Wissen ausgelöst.

werden vom Compiler nicht entdeckt. werden nach dem Programmstart nur durch unerwartete

Ergebnisse entdeckt. können nur durch das Testen des Programms während der

Entwicklung entfernt werden.

c# - Einführung | 29.06.12 Seite 21

Einzelschrittmodus nutzen

Mit Hilfe von <F11> wird das Programm Zeile für Zeile durchlaufen.

Die aktuelle Zeile wird gelb hinterlegt und am linken Rand des Codefenster mit einem gelben Pfeil gekennzeichnet.

c# - Einführung | 29.06.12 Seite 22

Debuggen - Prozedurschritt

Mit Hilfe von <F10> wird ein Prozedur Zeile für Zeile durchlaufen.

Sobald eine andere Prozedur aufgerufen wird, wird diese vollständig in einem Schritt abgearbeitet. Die aufgerufene Prozedur wird nicht im Einzelschritt durchlaufen.

Die aktuelle Zeile wird gelb hinterlegt und am linken Rand des Codefenster mit einem gelben Pfeil gekennzeichnet.

c# - Einführung | 29.06.12 Seite 23

Haltepunkte ...

stoppen das Programm in einer bestimmten Zeile.

ermöglichen die Untersuchung einer bestimmten Zeile. stoppen das Programm an einer bestimmten Position, um alle

weiteren Anweisungen im Einzelschritt zu durchlaufen. können nur auf ausführbare Anweisungen gesetzt werden.

c# - Einführung | 29.06.12 Seite 24

… setzen

Klick auf eine ausführbare Anweisung

<F9> (Debuggen – Haltepunkte umschalten). Oder: Klick auf den grauen, linken Rand des Codefensters.

c# - Einführung | 29.06.12 Seite 25

… löschen

Klick auf eine ausführbare Anweisung

<F9> (Debuggen – Haltepunkte umschalten). Oder: Klick auf ein Haltepunkt im grauen, linken Rand des

Codefensters.

c# - Einführung | 29.06.12 Seite 26

Wert einer Variablen anzeigen

Das Programm wird im Einzelschritt durchlaufen.

Der Mauszeiger liegt über den Namen einer Variablen. Der Wert der Variablen wird in einem Fenster angezeigt.

c# - Einführung | 29.06.12 Seite 27

… andocken

Das Programm wird im Einzelschritt durchlaufen.

Der Mauszeiger liegt über den Namen einer Variablen.

Klick auf den Pin. Das temporäre Fenster wird an die Variable angebunden.

c# - Einführung | 29.06.12 Seite 28

Verbindung lösen

Das Programm wird im Einzelschritt durchlaufen.

Klick auf den Pin. Das temporäre Fenster wird von der Variablen gelöst, aber nicht geschlossen.

Mit Hilfe des Kreuzes kann das Fenster geschlossen werden.

c# - Einführung | 29.06.12 Seite 29

Alle Variablen anzeigen

Das Programm wird im Einzelschritt-Modus durchlaufen.

Debuggen – Fenster – Lokal. Es werden alle lokalen Variablen der Methode und deren Werte

angezeigt.

c# - Einführung | 29.06.12 Seite 30

Überwachung von Variablen

Das Programm wird im Einzelschritt-Modus durchlaufen.

Debuggen – Fenster – Überwachen. Mit Hilfe der Maus wird der Name einer Variablen in das

Überwachungsfenster gezogen.