Java Debug output

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
  • Hi!

    Ich hab mich mal ein wenig durch google und die Forumssuche geklickt, habe aber nichts in die Richtung gefunden.

    Ich suche also etwas wie (aus C)

    Code
    #ifdef DEBUG
    //do debug output
    #endif

    das einzige, was ich bis jetzt gefunden habe, was irgendwie in die nähe kommt wäre

    Code
    private static final boolean DEBUG = ......;
    
    
    if(DEBUG){//do debug output}

    ich hätte aber gerne eine Möglichkeit, das bei javac mit zu übergeben ala cc -DDEBUG.

    Soweit ich weiß hat java keinen pre-processor, aber wenn ich DEBUG false setze werden die Debugteile wegoptimiert (siehe javap), also denke ich, dass javac da etwas ähnliches tut.

    Weiß jemand von euch etwas zu dem Thema beziehungsweise, kann mir jemand sagen was hier die best practice ist?

    Thanks in advance
    LG
    Tor

  • fallst du keine Loesung findest (mir ist keine bekannt), kannst du einfach den C-Preprozessor nehmen:

  • Danke. Wusste nicht, dass das geht.

    Das passt sicher hin. Leider kann ichs für diese Aufgabe nicht verwenden (DS Abgabe und Kontrolle über ANT Skript).
    Es freut mich aber sehr, dass es generell eine so einfache Lösung gibt.

    Das erleichtert es mir schon mal insgesamt.

  • Das passt sicher hin. Leider kann ichs für diese Aufgabe nicht verwenden (DS Abgabe und Kontrolle über ANT Skript).

    In DSLab kommt's ja ohnehin nicht so auf die Performance an.

    Meines Wissens ist's in Java üblich, irgendein Logging-Framework zu verwenden und dann bei Bedarf die Verbosity dieses Frameworks anzupassen. Sollte mit den Java-Bordmitteln im Package java.util.logging eigentlich gehen (oder ist's die Klasse java.util.Logging? Weiß nicht mehr genau).

  • In DSLab kommt's ja ohnehin nicht so auf die Performance an.

    Das stimmt.
    Mir geht's darum, dass ich mir sparen möchte die Stacktrace Ausgaben zu löschen, respektive (viel wichtiger) sie dann für die Erweiterung wieder einfügen zu müssen.
    Das mit dem logging aus util hört sich aber nach einem guten Platz für die Suche an.

  • Wie Paulchen gesagt hat, Java Logging API wäre die normale Lösung. Für den laufenden Betrieb stellst du den Logger einfach ab.

    Dieser Hack mit dem C-Präprozessor würde es schwer machen, den Code mit einer IDE wie Eclipse zu verwenden, die den Code im Hintergrund laufend kompiliert, und die #-Anweisungen ständig als Fehler erkennen und anzeigen würde. Plus es ist sehr un-Java-like. Pfui.

  • Ich würde vermuten wenn du eine Konstante definierst a la (pseudocode, hab schon lange nix mehr mit java gemacht) final static boolean logging = false; dass der java compiler so schlau ist und anweisungen der form if (logging){ ... } wegoptimiert. compiler sind intelligenter als man denkt ;)

    möglicherweise ist diese if anweisung in einem logging framework deiner wahl versteckt.

    edit: wenn ich das ausgangsposting gelesen hätte, hätte ich mir dieses posting sparen können. sorry für die redundanz.

    Patient: "Doctor, doctor, my eye hurts when I poke it with a spoon."
    Doctor: "Don't poke it, then."

  • Das ist Einstellungssache. Ich finds mehr Hui ;)

    Geht mehr darum, nicht auf Java einzuprügeln, bis es ausschaut, wie die Sprache, von der man her kommt. Gibt genug furchtbare Java-Programme, die aussehen wie C. Besser die Gepflogenheiten der Sprache kennen lernen und nach denen arbeiten, bis man versteht, warum die so gelöst worden sind, und nicht so, wie man's kennt. Es ist Geschmackssache, aber so Geschmackssache wie in "ich speib aufn Teller und ess es dann auf" :p.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!