¿Cómo depuro mi código asíncrono basado en promesas si la biblioteca está tragando todas las excepciones?

El problem

JSFiddle: http: //jsfiddle.net/missingno/Gz8Pe/2

Tengo un código que se ve así:

var d = new Deferred();
d.resolve(17);
return d.then(function(){
     //do some stuff...
})
.then(function(){
    var obj = a_funtion_that_returns_null_on_IE();
    var x = obj.some_property; //BOOM!
});

El problema es que cuando estoy en IE todo lo que puedo ver son'obj' is null or not an object errores, sin ninguna referencia al número de línea correspondiente y sin que el depurador se detenga en la línea ofensiva (como desearía que lo hiciera).

Este tipo de problema hace que el código sea difícil de depurar y las únicas soluciones en las que puedo pensar ahora (jugar con la biblioteca de flujo de control o recurrir a la depuración paso a paso con el depurador o console.log) son cosas Preferiría no tener que hacer.

Lo que creo que está pasando

Para permitir que se agreguen errbacks después de que se dispare la cadena,then detectará de forma preventiva las excepciones generadas por las devoluciones de llamada. Creo que esta es la razón por la cual el depurador de IE no se detiene en el error o muestra el mensaje de error habitual con el número de línea.

os mensajes de error sin los números de línea provienen de la biblioteca de flujo de control: proporciona undeferredOnError hook que se llama cada vez que se detecta una excepción y se guarda para más tarde y el comportamiento predeterminado es console.error del objeto Error:

dojo.config.deferredOnError = function(err){
    //a chance to log the exception after it is captured by "then"
    //or do other things with it
    console.error(err);
}

Sadly, no pude encontrar una manera de obtener el número de línea o el seguimiento de la pila del objeto de error en IE y se llama al gancho de una manera que no me permite simplemente volver a lanzar la excepción y dejar que suba hasta el nivel superior .

Lo que quier

Quiero tener una mejor manera de depurar el código asíncrono y luego ir junto con el depurador paso a paso. En el mejor de los casosuna forma de detener el depurador en las excepciones (como lo hace en excepciones no manejadas) al menos una forma deget números de línea o trazas de pila del objeto Error que fue arrojado.

Respuestas a la pregunta(6)

Su respuesta a la pregunta