2011-10-12 58 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