One of the things we designed MarkedUp to do was to be able to capture and save fatal errors that crash your Windows 8 applications and to reliably transmit them back to the developer for analysis and diagnosis.
Most fatal errors fall into one of two categories:
- Something went wrong with the environment outside the application, like an OS / driver error or an hardware issue; or
- The application failed to handle an exception thrown by the application itself.
Fatal errors in category #1 are impossible to recover from (usually because the application runtime or OS crashed) and are typically outside the control of the developer anyway.
Errors in category #2 are firmly in the control of the developer, however – and I’m going to show you how to tackle them in WinJS.
Sometimes you’re going to forget to handle an error in-context in your application – so what can you do to stop unhandled exceptions from crashing your application? Use the last-chance exception handler.
If you’ve done any serious Windows Phone 7 development, then you might have worked with LittleWatson at some point for simple last-chance exception handling and reporting – like this:
So how do you tackle this in WinJS?
The answer is fairly simple – in your default.js file you just need to chain an event handler to WinJS.Application.onerror event, like this:
In this instance I’m just using MarkedUp to transmit the fatal error message back to our servers next time the app starts (which is really the only safe way to capture a fatal error message.)
This technique has worked well for me for my Windows Phone 7 applications and should work fine for WinJS / Win8 too!
if app uses mixed framework, how to collect crash? for example, app uses winjs , and winjs code calls winrt dll for network or others, when a crash happens in winrt dll, how to collect?
Gavin,
This is an interesting edge case – off the top of my head I’m not sure how we’d capture that. We’ve had a few other scenarios pop up with mixed framework examples – we’ll investigate this further and see what we can do.