javascript/lib/core/kirin-webview.js
function handleError(during, e) {
    /*
     *    {
            "message": "Can't find variable: cardObject",
            "line": 505,
            "sourceId": 250182872,
            "sourceURL": "file:///Users/james/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/ADE774FF-B033-46A2-9CBA-DD362196E1F7/Moo.app/generated-javascript//src/controller/CardController.js",
            "expressionBeginOffset": 22187,
            "expressionCaretOffset": 22197,
            "expressionEndOffset": 22197
        }
     */
    console.error("-------------------------------------------------");
    console.error("Exception found " + during);
    console.error("Message: " + e.message);
    console.error("at     : " + e.line);
    var filename = e.sourceURL || "unknown";
    /*jshint regexp:false*/
    filename = filename.replace(/.*generated-javascript\//, "");
    /*jshint regexp:true*/
    console.error("file   : " + filename);
    console.error("url    : " + e.sourceURL);
    
    var stack = e.stack || e.stacktrace;

    if (stack) {
        console.error(stack);
    } else {
        console.log("No stack trace");
    }
}
function handleError(during, e) {
    /*
     *    {
            "message": "Can't find variable: cardObject",
            "line": 505,
            "sourceId": 250182872,
            "sourceURL": "file:///Users/james/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/ADE774FF-B033-46A2-9CBA-DD362196E1F7/Moo.app/generated-javascript//src/controller/CardController.js",
            "expressionBeginOffset": 22187,
            "expressionCaretOffset": 22197,
            "expressionEndOffset": 22197
        }
     */
    console.error("-------------------------------------------------");
    console.error("Exception found " + during);
    console.error("Message: " + e.message);
    console.error("at     : " + e.line);
    var filename = e.sourceURL || "unknown";
    /*jshint regexp:false*/
    filename = filename.replace(/.*generated-javascript\//, "");
    /*jshint regexp:true*/
    console.error("file   : " + filename);
    console.error("url    : " + e.sourceURL);
    
    var stack = e.stack || e.stacktrace;

    if (stack) {
        console.error(stack);
    } else {
        console.log("No stack trace");
    }
}
function handleError ( during , e ) { /*
     *    {
            "message": "Can't find variable: cardObject",
            "line": 505,
            "sourceId": 250182872,
            "sourceURL": "file:///Users/james/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/ADE774FF-B033-46A2-9CBA-DD362196E1F7/Moo.app/generated-javascript//src/controller/CardController.js",
            "expressionBeginOffset": 22187,
            "expressionCaretOffset": 22197,
            "expressionEndOffset": 22197
        }
     */ console . error ( "-------------------------------------------------" ) ; console . error ( "Exception found " + during ) ; console . error ( "Message: " + e . message ) ; console . error ( "at     : " + e . line ) ; var filename = e . sourceURL || "unknown" ; /*jshint regexp:false*/ filename = filename . replace ( / .*generated-javascript\/ / , "" ) ; /*jshint regexp:true*/ console . error ( "file   : " + filename ) ; console . error ( "url    : " + e . sourceURL ) ; var stack = e . stack || e . stacktrace ; if ( stack ) { console . error ( stack ) ; } else { console . log ( "No stack trace" ) ; } }
This is a generic error handler.

It does its best to report a stack trace, or an error or *something*.
Unfortunately, some devices are better suported than others.
e.g. Android >2.0, iOS 4.3 and iOS 6.0 are pretty good at providing errors (e.g. file location, stack trace etc)
iOS5 was shockingly bad.

@param during - what were you doing when you saw this error. This is a string.
@param e - the error itself. This, hopefully, is an Error object.
This is a generic error handler .