Chrome异常对象(几乎)为空



我试图从异常对象(传递到一个"catch")中获得有用的信息,它在chrome中几乎是空的。我以前使用过它,并且能够得到一个合理的堆栈跟踪,以及其他一些东西。这是一个改变chrome,还是我做错了什么?我正在这样做:

http://jsfiddle.net/R9Wkg/

function pr(s) {
    document.body.innerHTML += s.toString() + "<br>";
}
function test() {
    try {
        var a = b; // err: b not defined
    } catch (ex) {
        pr('==== print exception object =====');
        pr(ex);
        pr('======= typeof exception object =====');
        pr(typeof ex);
        pr('===== members ======');
        for (var i in ex) {
            pr('&nbsp;----- ' + i + " ------");
            pr(ex[i]);
        }
        console.log(ex);
    }
}
function first() {
    second();
}
function second() {
    test();
}
first();

在Chrome中,它给我的只不过是字符串"ReferenceError: b未定义",如果我在异常对象上做toString(),但如果我试图查看对象的各个成员,那里什么也没有。值得注意的是,没有"堆栈"成员。然后,如果在控制台中查看,那里还有更多(但堆栈只是"-")

这个连字符表示它是一个getter,不会自动执行,因为它可能有副作用。但是,您可以分别记录它们:http://jsfiddle.net/R9Wkg/1/.

错误不可计数的事实是在V8的项目网站作为一个问题。

您可以使用Object.getOwnPropertyNames(ex)枚举错误的成员。

pr('===== members ======');
Object.getOwnPropertyNames(ex).forEach(function(i) {
    pr('&nbsp;----- ' + i + " ------");
    pr(ex[i]);
});
http://jsfiddle.net/gilly3/R9Wkg/3/

最新更新