2011-10-18 66 views
6

我從控制檯調用函數,但是當它引發異常時,我沒有收到類似於代碼正常執行的堆棧跟蹤。在Chrome中從控制檯運行代碼時出現錯誤堆棧跟蹤

有沒有一種方法可以修改我的命令(也許用try/catch)讓它提供這些信息?

澄清:

page.js:

function otherStuff() { return ['a','b',undefined,'c']; 
function doStuff() { 
    var x = otherStuff(); 
    var z = parseInt(x[2]); // this will throw an error 
} 

控制檯,加載鏈接page.js

> otherStuff(); 

我沒有得到任何行號從一個HTML頁面後返回給我的錯誤。當從頁面(而不是控制檯)運行它時,我會收到一個行號和一個堆棧跟蹤。

+0

命令是什麼?什麼版本的鉻? (你母親的孃家姓是什麼?) – Neal

+0

查看我的答案更新。 – Neal

回答

11

雖然冗長,這將打印的互動錯誤的堆棧跟蹤在Chrome JS控制檯:

try { 
    throw new Error(); 
} catch (e) { 
    console.error(e.stack); 
} 

不幸的是如果非Error對象拋出這是不行的。

+0

這工作得很好。數據格式不同,但所有內容(對我來說最重要的是行號)。如果一個非'Error'對象被拋出,我的堆棧跟蹤信息將會丟失,對嗎?因爲我們在這種情況下從'Error'對象中檢索它 –

+0

是的,對於任何不基於JS的標準Error對象的自定義錯誤對象都是如此。我試着在拋出一個字符串的時候在'catch'子句中設置一個斷點,試圖查看Chrome是否在內部創建了某種適當的異常對象,可以使用 - 沒有這種運氣。 – millimoose

+1

只需注意:MobileSafari似乎不會爲其錯誤提供「堆棧」屬性。 –

2

您的代碼有錯誤。

你缺少一個右括號:

function otherStuff() { return ['a','b',undefined,'c']; //} where am i? 
function doStuff() { 
    var x = otherStuff(); 
    var z = parseInt(x[2]); // this will throw an error 
} 

麪點:

parseInt(undefined)拋出一個錯誤。例如:http://jsfiddle.net/maniator/Zequj/2/

+0

正確處理所有的問題當然是一個草率的例子。 –