Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 7 Fehlerbehandlung und Debugging
Pfeil 7.1 Laufzeitfehler behandeln
Pfeil 7.1.1 Laufzeitfehler erkennen
Pfeil 7.1.2 Die »try...catch«-Anweisung
Pfeil 7.1.3 Behandlung mehrerer Exceptions
Pfeil 7.1.4 Die Reihenfolge der »catch«-Zweige
Pfeil 7.1.5 Ausnahmen in einer Methodenaufrufkette
Pfeil 7.1.6 Ausnahmen werfen oder weiterleiten
Pfeil 7.1.7 Die »finally«-Anweisung
Pfeil 7.1.8 Die Klasse »Exception«
Pfeil 7.1.9 Benutzerdefinierte Ausnahmen
Pfeil 7.2 Debuggen mit Programmcode
Pfeil 7.2.1 Einführung
Pfeil 7.2.2 Die Klasse »Debug«
Pfeil 7.2.3 Die Klasse »Trace«
Pfeil 7.2.4 Bedingte Kompilierung
Pfeil 7.3 Fehlersuche mit Visual Studio 2012
Pfeil 7.3.1 Debuggen im Haltemodus
Pfeil 7.3.2 Das »Direktfenster«
Pfeil 7.3.3 Weitere Alternativen, um Variableninhalte zu prüfen

Galileo Computing - Zum Seitenanfang

7.3 Fehlersuche mit Visual Studio 2012Zur nächsten Überschrift

Unter dem Begriff Debugging ist die Suche nach Fehlern in einem Programm zu verstehen. Sie müssen ein Programm debuggen, wenn es nicht so funktioniert, wie Sie es sich vorgestellt haben, oder wenn es falsche Ergebnisse liefert. Die Ursache für das Fehlverhalten kann das Debuggen liefern. Visual Studio 2011 unterstützt das Debuggen sowohl von lokalen als auch von entfernten (Remote-) .NET-Anwendungen. Da wir uns in diesem Buch nur mit lokalen Anwendungen beschäftigen, schenken wir dem Remote Debugging keine Beachtung.

Der Debugger kann nur zur Laufzeit eines Programms benutzt werden. Darüber hinaus muss das Programm auch noch angehalten sein. Hier gibt es drei verschiedene Möglichkeiten:

  • Die Laufzeit der Anwendung erreicht einen Haltepunkt.
  • Die Anwendung führt die Methode Break der Klasse Debugger aus.
  • Es tritt eine Ausnahme auf.

Galileo Computing - Zum Seitenanfang

7.3.1 Debuggen im HaltemodusZur nächsten ÜberschriftZur vorigen Überschrift

Auf der linken Seite im Codeeditor ist ein grauer, vertikaler Balken zu sehen. Dieser dient nicht dazu, die Optik des Codefensters zu verbessern, sondern in bestimmten Codezeilen Haltepunkte zu setzen. Dazu klicken Sie mit der Maus auf den grauen Balken. Alternativ können Sie auch den Cursor in die Zeile setzen, der ein Haltepunkt hinzugefügt werden soll, und dann die Taste F9 drücken. Haltepunkte können jeder Codezeile hinzugefügt werden, die eine Programmanweisung enthält. Ein roter Punkt symbolisiert den Haltepunkt, der beim Anklicken und durch die F9-Taste wieder entfernt wird.

Trifft die Laufzeitumgebung auf einen Haltepunkt, hält der Debugger an dieser Stelle die Programmausführung an. Die mit dem Haltepunkt gekennzeichnete Codezeile ist in diesem Moment noch nicht ausgeführt. Im Haltemodus können Sie einzelne Variableninhalte untersuchen, ändern oder den Programmcode in gewünschter Weise fortsetzen. Dabei werden Sie auch von mehreren Fenstern des Debuggers unterstützt: Überwachen, Lokal und Auto.

Um ein unterbrochenes Programm fortzusetzen, haben Sie mehrere Möglichkeiten: über das Menü Debuggen, die gleichnamige Symbolleiste (diese wird standardmäßig nicht angezeigt und muss gegebenenfalls der Entwicklungsumgebung hinzugefügt werden) und diverse Tastenkürzel.

Befindet sich die Laufzeit einer Anwendung im Haltemodus, können Sie die weitere Programmausführung wie folgt beeinflussen:

  • Einzelschritt – Der Programmcode wird Zeile für Zeile ausgeführt. Das Tastaturkürzel dafür ist F11. Mit F11 wird auch in einer aufgerufenen benutzerdefinierten Methode jede Codezeile einzeln ausgeführt.
  • Prozedurschritt – Der Programmcode wird weiterhin in Einzelschritten ausgeführt. Stößt er jedoch auf den Aufruf einer benutzerdefinierten Methode, wird diese sofort vollständig ausgeführt. Das Tastaturkürzel ist F10.
  • Ausführen bis Rücksprung – Die aktuelle Methode wird bis zu ihrem Ende sofort ausgeführt. Danach wird der Haltemodus wieder aktiviert. Die Tastenkombination ist Shift + F11.

Bei den Haltepunkten müssen Sie eine Besonderheit von Visual Studio im Zusammenhang mit den Eigenschaften beachten. Per Vorgabe werden die Eigenschaftsmethoden wie Variablen behandelt, was zur Konsequenz hat, dass beim Bearbeiten einer Eigenschaft nicht in die Eigenschaftsmethode gesprungen wird. Dieses Standardverhalten können Sie im Optionen-Dialog abändern, indem Sie den Dialog unter Extras Optionen öffnen und dort unter Debugging Allgemein die entsprechende Einstellung ändern (siehe Abbildung 7.10).

Abbildung

Abbildung 7.10 Option zum Überspringen von Eigenschaftsmethoden

Variableninhalte in einem »QuickInfo«-Fenster

Um sich den aktuellen Zustand einer Variablen anzeigen zu lassen, fährt man im Haltemodus mit dem Mauszeiger auf den Variablenbezeichner. Der Inhalt einschließlich einer kleinen Beschreibung wird daraufhin in einem QuickInfo-Fenster angezeigt. Im QuickInfo-Fenster können Sie sogar den Inhalt der Variablen verändern.

Bedingte Haltepunkte

Die im vorhergehenden Abschnitt beschriebenen Haltepunkte unterbrechen in jedem Fall die Programmausführung, weil sie an keine Bedingungen gebunden sind. Der Debugger ermöglicht auch die Festlegung von Haltepunkten, die eine Anwendung nur dann in den Haltemodus setzen, wenn bei Erreichen des Haltepunkts bestimmte Bedingungen erfüllt sind. Um eine Bedingung festzulegen, gehen Sie mit dem Cursor in die Codezeile des betreffenden Haltepunkts, öffnen das Kontextmenü und wählen Haltepunkt Bedingung.... Das Fenster, das sich daraufhin öffnet, sehen Sie in Abbildung 7.11.

Abbildung

Abbildung 7.11 Festlegen einer Haltepunktbedingung

Legen Sie nun die Bedingung fest, unter der der Haltepunkt zur Laufzeit berücksichtigt werden soll. In der Abbildung wäre das genau dann der Fall, wenn die Variable value einen Wert kleiner 8 aufweist. Ist value gleich oder größer 8, wird das laufende Programm in dieser Codezeile nicht unterbrochen. Alternativ kann auch das Optionsfeld Hat sich geändert markiert werden. Der Debugger prüft dann zuerst, ob sich der Wert der Variablen seit dem letzten Erreichen des Haltepunktes geändert hat. Wenn dies der Fall ist, ist die Bedingung erfüllt, und das Programm wird unterbrochen.

Haltepunkt mit Trefferanzahl aktivieren

Im Kontextmenü eines Haltepunktes können Sie sich auch für die Option Trefferanzahl... entscheiden. Wenn für einen Haltepunkt keine Trefferanzahl angegeben wurde, wird das Programm immer unterbrochen, wenn der Haltepunkt erreicht wird oder die definierte Bedingung erfüllt ist. Die Festlegung der Trefferanzahl bietet sich z. B. an, wenn die Anzahl der Schleifendurchläufe festgelegt werden soll, bis der Haltepunkt aktiv wird. Ist eine Vorgabe getroffen, wird die Ausführung nur bei Erreichen der Trefferanzahl unterbrochen. Aus einem Kombinationslistenfeld können Sie eine der vier angebotenen Einstellungen wählen.

Abbildung

Abbildung 7.12 Festlegen der Trefferanzahl

Verwalten der Haltepunkte

Die Eigenschaften aller Haltepunkte kann man sich im Haltepunktfenster anzeigen lassen. Wählen Sie dazu das Menü Debuggen Fenster Haltepunkte. Dieses Fenster ist als Verwaltungstool sehr nützlich, um sich einen Überblick über alle gesetzten Haltepunkte zu verschaffen, die Bedingungen jedes einzelnen zu überprüfen und gegebenenfalls auch zu verändern. Können oder wollen Sie zum Testen einer Anwendung auf einen oder mehrere Haltepunkte verzichten, entfernen Sie einfach das Häkchen vor dem entsprechenden Haltepunkt. Im Codeeditor ist die zu diesem Haltepunkt gehörende Kreisfläche danach nicht mehr farblich ausgefüllt, sondern nur noch als Kreis erkennbar. Die deaktivierten Haltepunkte lassen sich später wieder aktivieren, ohne dass die eingestellten spezifischen Eigenschaften verloren gehen.

Abbildung

Abbildung 7.13 Die Liste aller Haltepunkte


Galileo Computing - Zum Seitenanfang

7.3.2 Das »Direktfenster«Zur nächsten ÜberschriftZur vorigen Überschrift

Das Direktfenster wird für Debug-Zwecke, das Auswerten von Ausdrücken, das Ausführen von Anweisungen, das Drucken von Variablenwerten usw. verwendet. Es ermöglicht die Eingabe von Ausdrücken, die von der Entwicklungssprache während des Debuggens ausgewertet oder ausgeführt werden sollen. Um das Direktfenster anzuzeigen, wählen Sie im Menü Debuggen Fenster und dann Direkt.

Welche Möglichkeiten sich hinter dem Direktfenster verbergen, sollten wir uns an einem Beispiel verdeutlichen. Zu Demonstrationszwecken bedienen wir uns des folgenden Programmcodes:

class Program {
static void Main(string[] args)
{
int x = 10;
int y = 23;
int z = x + y;
Console.Write(z);
}

static void DebugTestProc() {
Console.WriteLine("In DebugTestProc");
}
}

Listing 7.19 Code zum Testen des Direktfensters

Operationen im Direktfenster setzen den Haltemodus voraus. Daher legen wir einen Haltepunkt in der Codezeile

int z = x + y;

fest. Nach dem Starten des Projekts stoppt das Programm die Ausführung am Haltepunkt. Sollte das Direktfenster in der Entwicklungsumgebung nicht angezeigt werden, müssen Sie es noch öffnen. Sie können nun im Direktfenster

?x

eingeben, um sich den Inhalt der Variablen x anzeigen zu lassen. Das Fragezeichen ist dabei notwendig. Ausgegeben wird im Befehlsfenster der Inhalt 10.

Wenn Sie Lust haben, können Sie auch den Inhalt aus dem Direktfenster heraus ändern. Dazu geben Sie

x = 250

ein. Wenn Sie danach den Code ausführen lassen, wird an der Konsole der Inhalt von z zu 273 berechnet und nicht, wie ursprünglich zu vermuten gewesen wäre, zu 33. Die Änderung einer Variablen im Direktfenster wird also von der Laufzeit berücksichtigt.

Sogar die Methode DebugTestProc können wir aus dem Direktfenster heraus aufrufen. Dazu geben wir nur

DebugTestProc()

ein.


Galileo Computing - Zum Seitenanfang

7.3.3 Weitere Alternativen, um Variableninhalte zu prüfenZur nächsten ÜberschriftZur vorigen Überschrift

Logische Fehler basieren darauf, dass Variablen unerwartete Inhalte aufweisen, der Programmcode aber syntaktisch richtig ist. Das Direktfenster ist eine Möglichkeit, Variablen zu prüfen, die jedoch nicht sehr komfortabel ist, wenn der Programmcode eines größeren Projekts untersucht werden muss. Visual Studio stellt aber mehrere weitere Alternativen zur Verfügung, die noch bessere und detailliertere Informationen bereitstellen. Allen Alternativen ist gemeinsam, dass sie nur im Haltemodus geöffnet werden können. Sie können dazu das Menü Debuggen Fenster benutzen, teilweise auch das Kontextmenü des Codeeditors. Die Variableninhalte lassen sich, wie auch im Befehlsfenster, verändern, um beispielsweise das Laufzeitverhalten der Anwendung in Grenzsituationen zu testen.

Das »Auto«-Fenster

Das Auto-Fenster zeigt alle Variablen der Codezeile an, in der sich der Haltemodus aktuell befindet, sowie alle Variablen der vorausgehenden Codezeile. Angezeigt werden neben dem Namen der Inhalt und der Datentyp. Wird beispielsweise in der Zeile 5 des folgenden Programmcodes ein Haltepunkt gesetzt, werden im Auto-Fenster die aktuellen Inhalte der Variablen x, y und z angezeigt (siehe Abbildung 7.14).

1:  static void Main(string[] args) {
2: double a = 22.5;
3: int x = 10;
4: int y = 23;
5: int z = x + y;
6: Console.Write(z);
7: }

Listing 7.20 Programmcode zum Testen des »Auto«-Fensters

Abbildung

Abbildung 7.14 Das »Auto«-Fenster

Das »Lokal«-Fenster

Das Fenster Lokal enthält alle Variablen mit Namen, Wert und Typ, die in der aktuellen Methode definiert sind. Variablen, die sich zwar im Gültigkeitsbereich einer Methode befinden, aber außerhalb deklariert sind, werden nicht vom Lokal-Fenster erfasst.

Das »Überwachen«-Fenster

Sie können ein Überwachungsfenster öffnen und die Variablen angeben, die vom Debugger überwacht werden sollen. Um eine Variable einem Überwachungsfenster zuzuordnen, markieren Sie die entsprechende Variable zur Laufzeit im Haltemodus und wählen im Kontextmenü Überwachung hinzufügen. Wollen Sie weitere Variablen überwachen lassen, können Sie diese auch manuell eintragen oder ebenfalls über das Kontextmenü der Variablen hinzufügen.

Abbildung

Abbildung 7.15 Das Fenster »Überwachen«



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de