NEWS

Kleines Debug Script gesteuert über State


  • Hallo,

    ich hatte in der letzten Zeit immer wieder mal das Problem, dass in meinen JavaScripten ominöse Fehler aufgetaucht sind, diese aber nach Neustart der JavaScript (im DebugMode) sich nicht mehr so schnell gezeigt haben… und die Logs dadurch unübersichtlich wurden.

    Habe deshalb habe ich ein kleines Script geschrieben, mit dem ich zur Scipt-Laufzeit über das "eigene" Debuging ein/ausschalten kann.

    Um die Funktionalität in einem Script zu nutzen, muss dort lediglich eine Variable mit dem Namen der zu debugenden Anwendung angelegt werden.

    Um dann seine MSGs auszugeben verwendet man statt log die Funktion myDebug("Das geht mal wieder nicht")

    Das Script legt im State-Ordner der laufenden javascript Instanz einen Ordner mit dem Namen "Debug" an, der für jede registrierte Anwendung dort ein Flag anlegt, mit dem man den Debug ein/ausschalten kann zur Laufzeit, also ohne Neustart des Scripts oder der java Instanz.

    Dazu muss man das Script in global speichern. Bei ersten Start des zu Debug Programms kommen einmalig ein paar Warnmeldungen, weil die States nicht angelegt sind, danach erscheinem nur noch Status-Meldungen wenn Debug ein oder ausgeschaltet wird.

    Vielleicht kanns ja der eine oder andere brauchen. Praktischer Weise kann man das dann sogar über VIS steuern.

    // V0.02 globalDebug.js
    // Erzeugt für jedes Programm bei der ersten Debugausgabe ein State in javascript.x.DEBUG
    // Durch setzen dieses Flags, können DeBug Messages im laufenden Script aktiviert/deaktiviert werden
    
    var DEBUGROOT = "javascript." + instance + ".Debug."; // Rootverzeichnis
    var DEBUGNAME = "";                                   // Platzhalter für die ID des Flags, muss durch das entsprechende Scipt gesetzt sein
    var myDebugActive = false;                            // ist true, wenn Debugging eingeschaltet ist
    var myDebugInit = false;                              // ist true, wenn die Debug Funktion initalisiert ist
    
    function initMyDebug() {
      createState(DEBUGROOT + DEBUGNAME, {
        type:   'boolean',
        read:   true,
        write:  true,
        def:    false,
        states: "false:DEBUG_OFF; true:DEBUG_ON"
      },false);
    
      myDebugActive = getState(DEBUGROOT + DEBUGNAME).val;
    }
    
    function myDebug (debugtext){
      if(!myDebugInit) {
        // Debug ist noch nicht initalisiert
        if(DEBUGNAME !== "") {
          initMyDebug();
          on ({id: DEBUGROOT + DEBUGNAME,change: "ne" }, function () {
            myDebugActive = getState(DEBUGROOT + DEBUGNAME).val;
            if(myDebugActive) {
              log("Debug MSGs aktiviert: " + DEBUGNAME, 'warn');
            } else{
              log("Debug MSGs deaktiviert: " + DEBUGNAME, 'warn');
            }
          });
          myDebugActive = getState(DEBUGROOT + DEBUGNAME).val;
          myDebugInit = true;
        } else {
          // Es wurde kein DEBUGNAME angegeben
          log("Use var DEBUGNAME for Debug Messages! See globalDebug.js", 'warn');
        }
      }
      if(myDebugActive) log('' + "MYDEBUG:" + debugtext + '');
    }
    // Im zu steuernden Script, muss der Scriptname fürs Debuggen angegeben sein
    // DEBUGNAME = "Testprogramm";
    // myDebug("Dies ist ein Test");
    
    

Suggested Topics

853
Online

38.4k
Users

43.9k
Topics

613.2k
Posts