开发者

Debugging Windows sidebar gadgets without Visual Studio

开发者 https://www.devze.com 2022-12-20 06:43 出处:网络
I\'m tr开发者_运维知识库ying to create a sidebar gadget without the use of Visual Studio. I\'ve looked around for ways to debug them, but everything says that the Visual Studio JIT debugger is the onl

I'm tr开发者_运维知识库ying to create a sidebar gadget without the use of Visual Studio. I've looked around for ways to debug them, but everything says that the Visual Studio JIT debugger is the only way to do it.

Has anyone been able to debug sidebar gadgets without Visual Studio?


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!


In Windows 7 a new registry key has been added that displays script errors at runtime on a given PC:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Sidebar]
"ShowScriptErrors"=dword:00000001

With that value set, you'll see dialogs when script errors occur.

0

精彩评论

暂无评论...
验证码 换一张
取 消