For years, I didn't use Visual Studio to work on Gadgets. There are a couple of ways you can debug gadgets without it, just not as extensively. For instance, you can't use the debugger;
command without a proper debugger attached to the process. What you can do is use a program like DebugView to catch messages output by the System.Debug.outputString()
method:
function test ()
{
System.Debug.outputString("Hello, I'm a debug message");
}
This allows you to output variable dumps and other useful tidbits of information at certain stages of your code, so you can track it however you like.
As an alternative, you can roll your own debugging/script halting messages using window.prompt()
. alert()
was disabled for gadgets and confirm()
is overridden to always return true, but they must have overlooked prompt()
.
function test ()
{
// execute some code
window.prompt(someVarToOutput, JSON.stringify(someObjectToExamine));
// execute some more code
}
The JSON.stringify()
method really helps out if you want to examine the state of an object during code execution.
Instead of window.prompt
, you can also use the VBScript MsgBox()
function:
window.execScript( //- Add MsgBox functionality for displaying error messages
'Function vbsMsgBox (prompt, buttons, title)\r\n'
+ ' vbsMsgBox = MsgBox(prompt, buttons, title)\r\n'
+ 'End Function', "vbscript"
);
vbsMsgBox("Some output message", 16, "Your Gadget Name");
Finally, you can catch all errors with your script using the window.onerror
event handler.
function window.onerror (msg, file, line)
{
// Using MsgBox
var ErrorMsg = 'An error has occurred'+(line&&file?' in '+file+' on line '+line:'')+'. The message returned was:\r\n\r\n'+ msg + '\r\n\r\nIf the error persists, please report it.';
vbsMsgBox(ErrorMsg, 16, "Your Gadget Name");
// Using System.Debug.outputString
System.Debug.outputString(line+": "+msg);
// Using window.prompt
window.prompt(file+": "+line, msg);
// Cancel the default action
return true;
}
The window.onerror
event even lets you output the line number and file (only accurate with IE8) in which the error occurred.
Good luck debugging, and remember not to leave in any window.prompts or MsgBoxes when you publish your gadget!