我试图从异常对象(传递到一个"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(' ----- ' + 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(' ----- ' + i + " ------");
pr(ex[i]);
});
http://jsfiddle.net/gilly3/R9Wkg/3/