2009-12-14 7 views
24

Khi bắt/xử lý ngoại lệ trong JavaScript, làm cách nào tôi có thể xác định xem ngăn xếp cuộc gọi là gì khi ngoại lệ xảy ra? (và nếu có thể, số dòng là gì)Xử lý ngoại lệ JavaScript - hiển thị số dòng

try 
{ 
    // etc... 
} 
catch (ex) 
{ 
    // At this point here I want to be able to print out a detailed exception 
    // message, complete with call stack, and if possible line numbers. 
} 

Trả lời

16

Mỗi trình duyệt xử lý vấn đề này theo cách khác nhau, vì vậy không có cách nào để thực hiện. This blog post có một số mã tốt để kết xuất một dấu vết ngăn xếp cho hầu hết các trình duyệt được hỗ trợ. Tôi không nghĩ rằng có một cách tốt để cung cấp số dòng.

Nếu bạn đang tìm cách gỡ lỗi một hàm cụ thể, Firebug có chức năng theo dõi ngăn xếp tốt (vis console.trace()).

+0

Tất nhiên, FireBug! – Upperstage

+1

Blog đó khá cũ (2008). Phải có một cách tốt hơn. – RayLoveless

+0

bài đăng trên blog đã chết ... –

11

Hãy xem this.

Một cách để phân tích các thông tin có sẵn:

try 
{ 
    doInit(); 
} catch(err) 
{ 
    var vDebug = ""; 
    for (var prop in err) 
    { 
     vDebug += "property: "+ prop+ " value: ["+ err[prop]+ "]\n"; 
    } 
    vDebug += "toString(): " + " value: [" + err.toString() + "]"; 
    status.rawValue = vDebug; 
} 
+0

Chỉ cần lưu ý - nếu bạn đang sử dụng phía máy chủ nút, thao tác này khá độc đáo. Upvoted - Cảm ơn bạn đã đăng bài! – j03m

1

Tôi đã phát hiện ra rằng trong JavaScript chạy dưới IE nó không thể chụp một stack trace tại thời điểm đó một ngoại lệ được bắt. Theo this PDF cách duy nhất để có được một dấu vết ngăn xếp trong IE là nếu bạn không xử lý ngoại lệ.