Bisher verwendete ich immer System.out.println(), um irgendwelche Werte zur Kontrolle und Fehlersuche auf der Konsole auszugeben.
Danach war ich oft damit beschäftigt, nach diesen System.out.println()'s zu suchen und diese wieder zu entfernen, :autsch:
Ich dachte, schade, dass es in Java keine so "magischen Variablen" wie "__FILE__" und "__LINE__" wie in PHP gibt...
Bei Google-Suche fand ich in diesem Artikel, dass es in Java noch etwas besseres gibt, und zwar die Klasse Throwable.
Ich entwickelte mir diesen Code, um Debug-Meldungen mit der aufrufenden Klasse + Zeilennummer auszugeben:
Die Ausgabe erfolgt über debug.Debugger.print(variable) oder debug.Debugger.print(String name, variable), wobei "variable" ein beliebiges Objekt oder primitiver Datentyp sein kann.
Zum Test/Demo ein HelloWorld.java:
gibt aus:
Ich hoffe, das hilft einigen, ansonsten - Verbesserungsvorschläge sind gerne willkommen.
Viele Grüße
Egon
Danach war ich oft damit beschäftigt, nach diesen System.out.println()'s zu suchen und diese wieder zu entfernen, :autsch:
Ich dachte, schade, dass es in Java keine so "magischen Variablen" wie "__FILE__" und "__LINE__" wie in PHP gibt...
Bei Google-Suche fand ich in diesem Artikel, dass es in Java noch etwas besseres gibt, und zwar die Klasse Throwable.
Ich entwickelte mir diesen Code, um Debug-Meldungen mit der aufrufenden Klasse + Zeilennummer auszugeben:
Java:
package debug;
public class Debugger {
public static void print(Object o) {
_print(new Throwable(), null, o);
}
public static void print(String name, Object o) {
_print(new Throwable(), name, o);
}
public static void print(long l) {
_print(new Throwable(), null, new Long(l));
}
public static void print(String name, long l) {
_print(new Throwable(), name, new Long(l));
}
public static void print(double d) {
_print(new Throwable(), null, new Double(d));
}
public static void print(String name, double d) {
_print(new Throwable(), name, new Double(d));
}
public static void print(float f) {
_print(new Throwable(), null, new Float(f));
}
public static void print(String name, float f) {
_print(new Throwable(), name, new Float(f));
}
public static void print(boolean b) {
_print(new Throwable(), null, b);
}
public static void print(String name, boolean b) {
_print(new Throwable(), name, b);
}
private static void _print(Throwable t, String name, Object o) {
StackTraceElement e = t.getStackTrace()[1];
StringBuilder sb = new StringBuilder();
sb.append("output from ").append(e.getClassName()).append(".").append(e.getMethodName()).append("() in line ").append(e.getLineNumber()).append(":\n");
if (name != null) {
sb.append(name).append(" = ");
}
if (o == null) {
sb.append("null");
} else {
sb.append(o.toString());
}
java.util.logging.Logger.getLogger(Debugger.class.getName()).log(java.util.logging.Level.INFO, sb.toString());
// Wer lieber System.out.println verwenden möchte:
//System.out.println(sb);
}
}
Die Ausgabe erfolgt über debug.Debugger.print(variable) oder debug.Debugger.print(String name, variable), wobei "variable" ein beliebiges Objekt oder primitiver Datentyp sein kann.
Zum Test/Demo ein HelloWorld.java:
Java:
package demo;
public class HelloWorld {
public static void main(String[] args) {
debug.Debugger.print("Hello World!");
debug.Debugger.print("Math.PI", Math.PI);
debug.Debugger.print("today", new java.util.Date());
debug.Debugger.print("nullobject", null);
}
}
gibt aus:
Code:
18.01.2012 01:49:41 debug.Debugger _print
INFO: output from demo.HelloWorld.main() in line 6:
Hello World!
18.01.2012 01:49:41 debug.Debugger _print
INFO: output from demo.HelloWorld.main() in line 7:
Math.PI = 3.141592653589793
18.01.2012 01:49:41 debug.Debugger _print
INFO: output from demo.HelloWorld.main() in line 8:
today = Wed Jan 18 01:49:41 CET 2012
18.01.2012 01:49:41 debug.Debugger _print
INFO: output from demo.HelloWorld.main() in line 9:
nullobject = null
Ich hoffe, das hilft einigen, ansonsten - Verbesserungsvorschläge sind gerne willkommen.
Viele Grüße
Egon