Christoph Kessler, IDA, Linköpings universitet, 2006. Feb. 2006 Fehlerbehandlung in Programmiersystemen Fehler-Klassifikation Behandlung statischer Fehler.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
DI Christian Donner cd (at) donners.com
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Imperative Programmierung -Entwicklungswerkzeuge
Objektorientierte Programmierung
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Imperative Programmierung Funktionen und Parameter
Automatisches Testen und Bewerten von Java-Klassen
Java-AG Ausnahmebehandlung Gerhard Gröger.
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
Semantische Fehler Seminar im Grundstudium WS2002/2003:
Explizite und editierbare Metainformationen für Software Muster.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Copyright 2004 Bernd Brügge Einführung in die Informatik II TUM Sommersemester Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität.
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Grundlagen der Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
2.4 Rekursion Klassifikation und Beispiele
Exception-Handling.
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Parallelisierung für Multiprozessor-Maschinen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Robuste Programme durch Ausnahmebehandlung
Omniscient Debugging und Slicing für Java
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Modellbasierte Software- Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Exceptions in der Programmiersprache Java.
Einführung in AspectJ ● Inhalt: 1)Überblick 2)Elemente des crosscuttings in AspectJ 3)„Hello World“ in AspectJ 4)Wie Aspekte in Java verwoben werden 5)Join.
 Präsentation transkript:

Christoph Kessler, IDA, Linköpings universitet, Feb Fehlerbehandlung in Programmiersystemen Fehler-Klassifikation Behandlung statischer Fehler Behandlung von Laufzeitfehlern Exception-Konzept Debugging Fehler-Klassifikation Behandlung statischer Fehler Behandlung von Laufzeitfehlern Exception-Konzept Debugging Christoph Kessler Universität Linköping, Schweden

2 Feb C. Kessler, IDA, Linköpings universitet. Programmierfehler… Ein erheblicher Teil der Gesamtkosten eines Softwareprojektes entfällt auf Testen, Fehlersuche und -behebung. Welche Fehlertypen können auftreten? Klassifikation Prävention, Diagnose, Behandlung Programmiersprachliche Konzepte Compiler, IDE Sonstige Werkzeuge: Debugger, Verifizierer,...

3 Feb C. Kessler, IDA, Linköpings universitet. Programmierfehler – Klassifikation (1) Syntaktische Fehler Syntaxfehlerz.B. vergessenes Semikolon Semantische Fehler Statische semantische Fehler Statische Typfehler Falscher Parametertyp; Downcast ohne Laufzeit-Überprüfung Nicht deklarierte Variable Laufzeitfehler Logische Fehler Algorithmische Fehlervergessener Spezialfall, Nichtterminierung Numerische FehlerAkkumulation von Rundungsfehlern KontraktverletzungVerletzung geforderter Invarianten

4 Feb C. Kessler, IDA, Linköpings universitet. Programmierfehler – Klassifikation (2) Laufzeitfehler – in der Regel nicht statisch prüfbar Zugriffsfehlerz.B.: Arrayindex-FehlerIndex out of bounds PointerfehlerDereferenziere NULL-Pointer Arithmetische FehlerDivision durch 0, Überlauf I/O – Fehlerunerwartetes Dateiende KommunikationsfehlerFalscher Empfänger, falscher Typ SynchronisationsfehlerDaten-race, deadlock Ressourcen-ErschöpfungSpeicher, Zeitkonto... Bemerkung: Es gibt weitere Fehlertypen, und Kombinationen.

5 Feb C. Kessler, IDA, Linköpings universitet. Gegenmittel: Prävention, Diagnose, Behandlung Programmiersprache / Laufzeitsystem Typsicherheit statische Typfehler Exception-Konzept Laufzeitfehler Automatische Speicherverwaltung Speicherlecks, Pointerfehler Compiler-Frontend, IDE Syntaxfehler, statische semant. Fehler Programmverifizierer Kontraktverletzung Code-Inspektion [Fagan76] Alle Fehlertypen Testen und Debuggen Laufzeitfehler Laufzeit-Schutzmonitor Zugriffsfehler Visualisierer Kommunikationsfehler, Synchronisationsfehler

6 Feb C. Kessler, IDA, Linköpings universitet. Exception-Konzept PL/I (IBM) ca. 1965: ON condition … J. B. Goodenough, POPL1975 und Comm. ACM Dez In vielen modernen Programmiersprachen unterstützt CLU, Ada, Modula-3, ML, C++, Java, C# Überblick: Fehler vs. Exception Exception-Propagation Geprüfte vs. ungeprüfte Exceptions Implementierung Exceptions in CORBA Exceptions und Aspekt-orientierte Programmierung Zusammenfassung und Literatur

7 Feb C. Kessler, IDA, Linköpings universitet. Exception-Konzept 2 Arten von Laufzeitfehlern: Fehler (error): im Programm nicht behandelbar, Programmabbruch Ausnahme (exception): im Programm (teilweise) behandelbar Ausgelöst (thrown) durch Laufzeitsystem bei erkanntem Laufzeitfehler oder durch das Programm selbst Nachricht an das Programm Laufzeitobjekt, das eine ungewöhnliche oder Fehlersituation definiert hat einen Typ (Exception-Klasse) kann Parameter haben, z.B. String mit Klartextmeldung Auch benutzerdefinierte Exceptions z.B. für Randfälle Exception-Handler: enthält Code-Block zur Behandlung ist statisch assoziiert mit geschütztem Code-Block, den er im Ausnahmefall ersetzt

8 Feb C. Kessler, IDA, Linköpings universitet. Exception – Beispiel (in Java) public class class1 { public static void main ( String[] args ) { try { System.out.println("Hallo, " + args[0] ); } catch (ArrayIndexOutOfBoundsException e ) { System.out.println("Bitte ein Argument angeben! " + e); } System.out.println("Tschuess"); } } % java class1 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at class1.main(class1.java:4) % java class1 Christoph Hallo, Christoph Tschuess % java class1 Bitte ein Argument angeben! java.lang.ArrayIndexOutOfBoundsException: 0 Tschuess

9 Feb C. Kessler, IDA, Linköpings universitet. Propagation von Exceptions Falls eine Exception nicht in der betroffenen Methode behandelt wird, wird die Methode verlassen und dieselbe Exception beim Aufrufer ausgelöst, bis entweder ein passender Handler gefunden wird, oder main() verlassen wird (dann Fehlermeldung und Abbruch). Optionaler finally-Block wird jedoch immer ausgeführt z.B. zur Rückgabe von Ressourcen Zu klären: Wann passt ein Handler? Wie kann man statisch sicherstellen, dass eine bestimmte Exception irgendwann behandelt wird? Implementierung?

10 Feb C. Kessler, IDA, Linköpings universitet. Wann passt ein Handler? Exception-Klassenhierarchie Benutzerdefinierte Exceptions durch Ableiten Handler catch( XYException e ) {…} passt, falls XYException vom gleichen Typ oder Supertyp der ausgelösten Exception ist. Object Throwable Error Exception RunTimeException ArrayIndexOutOfBoundsE. ArithmeticException NullPointerException IllegalAccessException NoSuchMethodException … VirtualMachineError ThreadDeath …

11 Feb C. Kessler, IDA, Linköpings universitet. Geprüfte und ungeprüfte Exceptions Geprüfte (checked) Exception: muss in einer Methode behandelt, oder in Methodendeklaration explizit als propagiert gekennzeichnet werden: void writeEntry( … ) throws IOException { … } Ungeprüfte (unchecked) Exception: wird implizit propagiert In Java: Alle Exceptions sind geprüft, ausser RunTimeException und deren Subtypen. Geprüfte Exceptions: + Kapselung + statische Prüfbarkeit + wird Teil des Kontrakts einer Methode + geeignet für Komponentensysteme, z.B. CORBA – Erweiterbarkeit

12 Feb C. Kessler, IDA, Linköpings universitet. -> catch(…) Implementierung Einfache Lösung: Stack von Handlern Bei Eintritt in geschützten Block (try {…}): Pushe alle seine Handler (catch(…) {…}) Bei Auftreten einer Exception: Poppe obersten Handler und beginne (Test auf Exceptiontyp). Falls der nicht passt, löse wieder aus und iteriere. (Falls letzter Handler in aktueller Methode auch nicht passte, poppe auch deren Activation record => verlasse Methode.) Bei normalem Verlassen des try-Blocks: poppe seine Handler + einfach – Overhead (push/pop) auch bei Nichtauftreten einer Exception Effizientere Lösung: Compiler erzeugt Tabelle aus Paaren (try-Block, passende Handler) Bei Auftreten einer Exception: finde try-Block durch Binärsuche (PC) main: foo: -> catch(E2) -> catch(E1) bar: void bar(…) { try { … } catch(E1 e) {…} catch(E2 e) {…} … }

13 Feb C. Kessler, IDA, Linköpings universitet. Exceptions in CORBA CORBA IDL (Interface Definition Language) erlaubt benutzerdefinierte Exceptions Sprachunabhängig Propagation über Fernaufrufe hinweg // IDL module BookRepository { … interface BorrowableCollection : Collection { exception Unavailable { Date when_available; } void borrow_book ( in ISBN book_id, in PersonName borrower, out Date return_date ) raises ( Unavailable ); }; };

14 Feb C. Kessler, IDA, Linköpings universitet. Exceptions und AOP Nachteil von Exception-Behandlung: catch()-Blöcke stören Programmübersicht Code-Länge Idee für Java: Exception-Behandlung als Aspekt ausfaktorisieren, mit Aspect-J einweben Systematischer durch generische Exceptionbehandlung Kompression des Exception-Behandlungscode um ca. 75% M. Lippert, C. Lopes: A Study on Exception Detection and Handling using Aspect-Oriented Programming. Proc. ICSE-2000, ACM.

15 Feb C. Kessler, IDA, Linköpings universitet. Zusammenfassung, Literatur Exceptions Bewährtes Konzept zur Behandlung von Laufzeitfehlern Effizient implementierbar Geeignet für komponentenbasierte Softwareentwicklung M. Scott: Programming Language Pragmatics. Morgan Kaufmann, Abschnitt 8.5 über Exception Handling. J. Goodenough: Structured Exception Handling. ACM POPL, Jan J. Goodenough: Exception Handling: Issues and a proposed notation. Communications of the ACM, Dec B. Ryder, M. Soffa: Influences on the Design of Exception Handling, 2003 Konferenzen ACM POPL und OOPSLA

Christoph Kessler, IDA, Linköpings universitet, Feb Debugging Debuggen vs. Testen Debugging-Methoden und Werkzeuge Debugger-Technologie Debuggen nebenläufiger Programme Zusammenfassung, Literatur

17 Feb C. Kessler, IDA, Linköpings universitet. Debugging Testen: kann Existenz eines Fehlers feststellen (ohne Garantie auf Vollständigkeit!) Vergleiche Ausgabe des Testkandidaten mit Referenzausgabe (z.B. älterer, korrekter Version – Regressionstesten, z.B. DEJAGNU) Debuggen: lokalisiere Fehler: Ursache Effekt Iterativer Prozess Systematisches Eingrenzen Initiale Hypothesen- menge Modifiziere Hypothesen- menge Wähle Hypo- these Verifiziere Hypo- these Fehler beseitigt? Fehler entdeckt nein ja

18 Feb C. Kessler, IDA, Linköpings universitet. Debugging-Techniken und Werkzeuge (1) Manuelle Methoden Statisch: Code-Inspektion Dynamisch: print-Anweisungen, Validierung von Zusicherungen (assert() ) Werkzeuge für die manuelle Fehlersuche: Symbolischer Debugger z.B. dbx, gdb, jdb, ddd Debug-Problem-Dokumentation z.B. BUGZILLA (Fehler-Datenbank + Web-Interface) Laufzeit-Schutz-Monitorsystem ibs. für Zugriffsfehler ElectricFence, VALGRIND, Java VM, INSURE++, PURIFY, …

19 Feb C. Kessler, IDA, Linköpings universitet. Debugging-Techniken und Werkzeuge (2) Automatisches Debugging: Formale Verifikation gegen formale Spezifikation des Programms Oft keine oder unvollständige formale Spezifikation verfügbar Ggf. Spezifikation herleitbar, aber dann selbst fehleranfällig Durchsuche Quellprogramm nach sprachspezifischen Fehler-Idiomen z.B. lint, splint, jlint unvollständig Fehlersuchbereich eingrenzen durch statische Analyse: Program Slicing [Weiser82] [Lyle, Weiser87] Program Dicing (Differenz zweier Slices) [Lyle, Weiser87] z.B. UNRAVEL slicer [Lyle95] Braucht gute statische Analyse (DFA, points-to-Analyse) Konservative statische Approximation – Slices werden schnell gross Delta-Debugging Automatisches Eingrenzen durch Binärpartitionierung (Eingabedaten, Code)

20 Feb C. Kessler, IDA, Linköpings universitet. Symbolischer Debugger (1) Braucht Information über Namen und Typ von Speicherstellen auf Quellcode-Niveau d.h., die Symboltabelle und Typtabelle des Compilers Wird bei Bedarf eingefügt (cc –g … ) Braucht Koordinaten der Programmpunkte im Quellcode (z.B. Zeilennr.) Braucht enge Kontrollfluss-Übereinstimmung zwischen Quellcode und Maschinencode Unverträglich mit aggressiven Programmoptimierungen z.B. Prefetching, Loop-invariant code hoisting, Schleifentransformationen, Scheduling Trade-Off Code-Effizienz Debugger-Transparenz Kann unter gewissen Umständen dazu führen, dass der Fehler mit Debugger nicht auftritt (gilt auch für print-debugging) Graphische Oberfläche (z.B. ddd, Eclipse Debug-View) über Kommandozeilen-Debugger (z.B. dbx, gdb, jdb)

21 Feb C. Kessler, IDA, Linköpings universitet. Symbolischer Debugger (2) Post-Mortem-Debugging Nach Absturz: Lies core-file; inspiziere Speicherinhalt, Variablenwerte Interaktives Debuggen Berechnung anhalten Breakpoints (Haltepunkte) setzen, löschen Schritt-für-Schritt-Ausführung Ausgabe von Werten, Ausdrucksauswertung (Interpreter) Variablenwerte ändern Aufrufkeller inspizieren Aufrufkette entlangwandern

22 Feb C. Kessler, IDA, Linköpings universitet. Debugger-Technik mit OS/HW-Support Debugger-ProzessZu debuggender ProzessOS-IRC fork() (via OS) ptrace() (via OS): trace me signal() (via OS): stop wait() (via OS) ptrace() (via OS) Lese, schreibe Werte im Adressraum; füge breakpoints (Spezialinstruktionen) in Code ein … signal() (via OS): resume OS trap Finde Breakpunkt: signal(): Breakpoint … signal(): continue

23 Feb C. Kessler, IDA, Linköpings universitet. Debuggen nebenläufiger Programme Problem: Auftreten des Fehlers kann vom Schedule abhängen Nichtdeterminismus schwer, Fehler zu reproduzieren Lösung 1: Deterministic replay Eingaben und Schedule aufzeichnen, z.B. DEJAVU für Java Lösung 2: Statische Analyse (möglicher Parallelismus, Data-races) Lösung 3: Dynamische Analyse identifiziert shared-memory-Zugriffe zur Laufzeit Lösung 4: Test-basierter Ansatz mit Delta-Debugging [Choi, Zeller 02] In Kombination mit DEJAVU Lauf 1: CPU Lauf 2: CPU Thread 1 Thread 2 t

24 Feb C. Kessler, IDA, Linköpings universitet. Zusammenfassung und Literatur Testen vs. Debuggen Debugging-Methoden Debugger-Technologie Debuggen nebenläufiger Programme M. Scott: Programming Language Pragmatics, Morgan Kaufmann Abschnitt über Debugging Srikant, Shankar: Compiler Design Handbook, CRC press 2003, Kap. 9 über Debugger-Technologie (von Aggarwal und Kumar) J. Rosenberg: How Debuggers Work. Wiley, A. Zeller: Why Programs Fail. A Guide to Systematic Debugging. Morgan Kaufmann, A. Zeller, J. Krinke: Open-Source Programmierwerkzeuge. Dpunkt, 2003.