2011-03-09 49 views
3

在Chrome中,发生异常时,它会将堆栈跟踪打印到控制台日志。这非常有用,但不幸的是,在重新抛出异常的情况下,这会导致问题。JavaScript重新抛出异常保留堆栈跟踪

} catch (e) { 
    if (foo(e)) { 
     // handle the exception 
    } else { 
     // The stack traces points here 
     throw e; 
    } 
} 

不幸的是,在jQuery.js下面的代码是导致所有的异常,如果他们从内部事件处理程序是有这个问题。

try { 
    while(callbacks[ 0 ]) { 
     callbacks.shift().apply(context, args); 
    } 
} 
// We have to add a catch block for 
// IE prior to 8 or else the finally 
// block will never get executed 
catch (e) { 
    throw e; 
} 
finally { 
    fired = [ context, args ]; 
    firing = 0; 
} 

有没有办法来改变throw e;使异常与同一堆栈跟踪重新抛出?

+1

的可能重复[我怎样才能重新引发在Javascript例外,但保留堆栈?](http://stackoverflow.com/questions/3734236/how-can-i-rethrow-an-exception-在JavaScript中但是保留堆栈) – cmroanirgo

回答

0

您可以做的最好的办法是抓住原始堆栈并打印出来。 我在单元测试工具中使用它。

try{ 
    ... 
} 
catch(e){ 
    console.log(e.stack); 
    console.log(e.message); 
    throw(e); 
} 
+1

注意:根据此线程(https://bugs.chromium.org/p/chromium/issues/detail?id=60240) 现在在Chrome中重新投影,但我发现它只适用于单个文件中定义的代码。我的重新投掷是在一个不同的文件,它不工作。 –

相关问题