2011-10-12 56 views
1

我想从异常对象(传递给“catch”)获取有用的信息,它在铬中几乎是空的。我之前使用过它,并且能够获得合理的堆栈跟踪等等。这是对铬的改变,还是我做错了什么?我这样做:铬异常对象(近)空

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()异常对象上,但如果我试图看看对象的个人成员,那里什么也没有。值得注意的是,没有“堆栈”成员。然后再次,如果在控制台中看,那里有更多(但堆栈只是“ - ”)

回答

1

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

pr('===== members ======'); 
Object.getOwnPropertyNames(ex).forEach(function(i) { 
    pr('&nbsp;----- ' + i + " ------"); 
    pr(ex[i]); 
}); 

http://jsfiddle.net/gilly3/R9Wkg/3/

+0

@rob - 是的,我意识到我对堆栈的错误并纠正了它。 :) – gilly3

+0

谢谢,这是有用的知道,即使pimvdb解决我目前的问题 – rob