Nov 072006

Two words:  No debugger.

Part of our charter here in the Windows Live team is to support as many browsers as practical.  I’d received reports that our Windows Live Contacts control doesn’t do much in an Opera browser, so in the calm following the signing off our most recent “sprint” I indulged in a diversion to trek off to Opera land to install their latest incarnation.

It’s a great looking browser – slick UI, slick PR packaging, slick photos of monochrome Scandinavian 20somethings suffering from incurable coolness.  And red hats.  For a browser, it does what it needs to do well – it browses.

When a JavaScript app throws an exception or blows chunks, the Opera error dialog is definitely a step up from IE’s typical vagaries.  Instead of something like “Object doesn’t support this property”, Opera will tell you which object and which property, and which line number, and so forth.

But what do you do when your JavaScript code doesn’t fail badly, and doesn’t succeed?  A spiffy error dialog is only helpful when there is a fatal error.  How do Opera advocates debug program flow logic and other intangibles in flight?

I couldn’t find a debugger in the Opera options or add-ons, so I looked in the FAQs and questions on the Opera community forum.  No dice, other than an item in the FAQ heralding Opera’s error dialog as infinitely better than IE.  It’s true, it is a much better error dialog.  But an error dialog is reactive, and after the fact.  A debugger is proactive, and lets you look around inside the box.  You can learn more about a program’s actual execution in 5 minutes in a debugger (with an inspector window / expression evaluator) than in a week of staring at source code.  Diagnosing problems by looking at source code is speculative, based on your assumptions about the execution environment. Diagnosing problems by looking at them execute is as close to touching binary reality as we’re going to get.

So I created an account on the Opera community forum to ask the question.

(Curious:  the Opera community account creation confirmation email to my Microsoft email address never arrived.  The confirmation to my home address arrived in a matter of minutes.  Is that an Opera filter banning messages to Microsoft or a Microsoft filter banning messages from Opera?  I can’t tell from this end.)

The response?  Opera doesn’t have a script debugger.  Opera advocates recommend strewing alerts or output statements throughout your JavaScript in order to get a picture of how execution flows through your code.  The phrase “put an output statement after every line of code you’re interested in” was actually uttered.

That’s nuts.  What would normally be a 5 minute spelunk through the code in any serious browser suddenly becomes hours of crawling around in a haystack.  I’d love to add Opera to our list, but it’s not worth that much effort.  Omission of script debugging support may not be a show stopper for hacks working on small apps, but it definitely presents an obstacle for large, complex web apps.  Without a script debugger, Opera does not scale.

All hope is not lost, though.  I know Opera gets lost somewhere in the Atlas initialization.  Perhaps the Atlas team has a newer build we should be using, or some other opportunity to divert / share the pain of diagnosing this Opera issue.


This post was originally published on my MSDN blog while I was at Microsoft.