Yes. Here's the full Debugger object:
Spoiler:
js code:
var Debugger = {};
Debugger.Start = new Date();
Debugger.Data = [];
Debugger.Trace = function(Text)
{
if (Messenger.MyStatus > 1)
{
try
{
if (Registry.Read("Options\\ChkDebug"))
{
Debug.Trace(Text);
Debugger.Data.push(Text);
}
}
catch (error)
{
Debug.Trace(Text);
Debugger.Data.push(Text);
}
}
else
{
Debug.Trace(Text);
Debugger.Data.push(Text);
}
}
Debugger.Call = function(Function, Parameters)
{
var Notif = Function.substr(Function.length - 19, Function.length);
if (Notif !== "MessageNotification" || (Notif === "MessageNotification" && Registry.Read("Options\\ChkDebugNotif")))
{
Debugger.Trace("=================================================================");
Debugger.Trace("** Event called: " + Function + " **");
Debugger.Trace("Call time: " + new Date());
Debugger.Trace("-----------------------------------------------------------------");
var Count = 0;
for (var Parameter in Parameters)
{
Debugger.Trace("|| " + Parameter + ": " + Parameters[Parameter]);
Count++;
}
if (Count === 0)
{
Debugger.Trace("(no attached parameters)");
}
Debugger.Trace("=================================================================");
}
}
Debugger.Catch = function(Function, Error)
{
Debugger.Trace("/////////////////////////////////////////////////////////////////");
Debugger.Trace("** Error in: " + Function + " **");
Debugger.Trace("Description: " + Error.description + " (" + Error.code + ")");
Debugger.Trace("Error time: " + new Date());
Debugger.Trace("/////////////////////////////////////////////////////////////////");
}
Debugger.Save = function(Path)
{
var TextFile = FSO.CreateTextFile(Path, 2);
TextFile.WriteLine("");
TextFile.WriteLine("=================================================================");
TextFile.WriteLine("**************** Interface Writer: Debugging Log ****************");
TextFile.WriteLine("-----------------------------------------------------------------");
TextFile.WriteLine("Start time: " + Debugger.Start);
TextFile.WriteLine("=================================================================");
TextFile.WriteLine("");
for (var X in Debugger.Data)
{
TextFile.WriteLine(Debugger.Data[X]);
}
TextFile.WriteLine("");
TextFile.WriteLine("=================================================================");
TextFile.WriteLine("End time: " + new Date());
TextFile.WriteLine("=================================================================");
TextFile.Close();
}
Edit: it works if the
Debugger::Catch function is specified at the start of the initialization function.
js code:
function OnEvent_Initialize(MessengerStart)
{
Debugger.Catch = function(Function, Error)
{
Debugger.Trace("/////////////////////////////////////////////////////////////////");
Debugger.Trace("** Error in: " + Function + " **");
Debugger.Trace("Description: " + Error.description + " (" + Error.number + ")");
Debugger.Trace("Error time: " + new Date());
Debugger.Trace("/////////////////////////////////////////////////////////////////");
}
try
{
Debugger.Call("Initialize", {"MessengerStart" : MessengerStart});
// ...
foo.bar(); // invalid function
}
catch (error)
{
Debugger.Catch("Initialize", error);
}
}
code:
From the Plus! Script Debug...
/////////////////////////////////////////////////////////////////
** Error in: Initialize **
Description: 'foo' is undefined (-2146823279)
Error time: Thu Jun 10 20:05:41 UTC+0100 2010
/////////////////////////////////////////////////////////////////