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");