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 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 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.