Debugging, Tracing und Logging

Transcription

Debugging, Tracing und Logging
10. Debugging, Tracing, Logging
Advanced Programming Techniques
Prof. Dr. Bernhard Humm
FB Informatik, Hochschule Darmstadt
Sommersemester 2011
1
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Einordnung in den gesamten Kurs
1. Einführung
2. Programmieren gegen Schnittstellen
3. Dokumentieren und Testen
4. Software-Kategorien
5. Komponenten
6. Referenzarchitektur Betriebliche Informationssysteme
7. Regeln für das Design von Komponenten
8. Fehlerbehandlung
9. Design Patterns
10. Debugging, Tracing, Logging
11. Konfigurationsmanagement
12. Funktionale Programmierung: Scala
13. Refactoring
2
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Agenda
• Übersicht
• Debugging
• Tracing, Logging
• Threads
3
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Debugging, Tracing und Logging:
unterschiedliche Ziele und Werkzeuge
Ziel
Warum?
Fehlersuche
Wann?
Während der
Entwicklung
Wer?
Entwickler
Warum? Fachliche /
technische
Nachvollziehbarkeit;
positiv + negativ
Wann? Während der
Produktion
Wer? Fachbereich /
Wartungsteam
4
Konzept
Werkzeuge
Debugging
Debugger in der IDE, z.B.
NetBeans
Tracing
JDK Logging
(java.util.logging.*)
http://download.oracle.com/ja
vase/1.4.2/docs/guide/util/log
ging/overview.html
Apache log4J
(http://logging.apache.org/log
4j)
Logging
Apache Commons
Logging
http://commons.apache.org/l
ogging/
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Agenda
• Übersicht
• Debugging
• Tracing, Logging
• Threads
5
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Debugging mit der NetBeans IDE
Step Modus
Schritte:
Call Stack
Line Breakpoint
Variablenwerte
1. Verortung
des Fehlers
(Line- /
Exception
Breakpoints,
Step Modus)
2. Analyse des
Fehlers (Call
Stack und
Variables)
3. Behebung
des Fehlers
(Editor)
6
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Agenda
• Übersicht
• Debugging
• Tracing, Logging
• Threads
7
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Logging mit dem JDK
• Einfache Nutzung über ein globales Logger Objekt:
Logger.getAnonymousLogger().info("log me");
• Angemessene Nutzung der Logging Funktionalität:
Logger logger = Logger.getLogger("current.package");
logger.info("log me");
• Format einer Log-Meldung:
Dec 19, 2001 2:41:13 PM MyProgram main
INFO: log me
• Logging kann ohne zu kompilieren an- und abgeschaltet werden.
8
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Logging-Stufen
• SEVERE
Desaströse Fehler, die einer sofortigen Behandlung bedürfen. Der
Betrieb kann nicht mehr vollständig gewährleistet werden.
• WARNING
Schwerwiegende Probleme, die einer gesonderten
Ausnahmebehandlung bedürfen.
• INFO
Der Default-Level, in dem alle fachlichen Protokollierungen
vorgenommen werden
• CONFIG
Protokollierung der Konfigurationseinstellungen.
• FINE, FINER, FINEST
Detaillierte Informationen zum Tracen eines Programms.
9
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Infrastruktur des Logging–Systems
Quelle: http://download.oracle.com/javase/1.4.2/docs/guide/util/logging/overview.html
• Um eine Meldung zu protokollieren, wird ein Logger-Objekt
benötigt.
• Logger-Objekt wird von der Factory-Methode
Logger.getLogger("package name") bereitgestellt
• Jedem Logger können beliebig viele Handler zugewiesen
werden.
10
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Infrastruktur des Logging–Systems
(Forts.)
• Ein Formatter wird von einem Handler zur Formatierung der
Meldung verwendet.
• Im java.util.logging-Paket werden ein SimpleFormatter
und ein XMLFormatter bereitgestellt.
• Ein Filter kann auf beliebige Meldungen angewendet werden.
• Filter können sowohl einem Handler als auch einem Logger
zugewiesen werden.
11
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Konfiguration des Logging–Systems
• Alle Logger werden im Kontext eines LogManagers definiert.
• Es gibt eine systemweite Konfiguration.
• Der Default-LogManager liest seine Einstellung aus der Datei
jre/lib/logging.properties.
• Zusätzliche Konfigurationen bieten eine größere Kontrolle.
• Der Default-LogManager kann mit readConfiguration()
reinitialisiert werden.
• LogLevel werden eingestellt auf
- Handler – Ebene
- Package – Ebene
• Level-Analyse „in Serie“.
12
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Konfiguration des Logging–Systems
(Forts.)
• Ein ErrorManager kümmert sich um Fehler, die der
Logger verursacht
• Logging-Fehler sind für die Anwendung nicht relevant.
• Der ErrorManager meldet nur den ersten Fehler.
• Der ErrorManager kann spezialisiert werden.
13
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
Agenda
• Übersicht
• Debugging
• Tracing, Logging
• Threads
14
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
java.lang.Thread
• Implementierung:
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
• Nutzung
PrimeThread p = new PrimeThread(143);
p.start();
Quelle: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html
15
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
java.util.concurrent. BlockingQueue<E>
• Implementierung:
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
}
Quelle: http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/BlockingQueue.html
16
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011
java.util.concurrent. BlockingQueue<E>
(Forts.)
• Nutzung:
class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
Quelle: http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/BlockingQueue.html
17
Prof. Dr. Bernhard Humm, FB Informatik, Hochschule Darmstadt. www.fbi.h-da.de/~b.humm. Sommersemester 2011