2013-03-17 34 views
6

Tôi quan tâm đến việc giám sát lỗi javascript và ghi lại lỗi bằng callstack.theo dõi lỗi js

Tôi không quan tâm đến việc bao trùm mọi thứ trong các khối try-catch.

Theo bài báo này http://blog.errorception.com/2011/12/call-stacks-in-ie.html nó có thể bên trong window.onerror "đệ quy gọi .caller cho mỗi chức năng trong ngăn xếp để biết các chức năng trước đó trong ngăn xếp"

tôi đã cố gắng để có được những callstack:

window.onerror = function(errorMsg, url, lineNumber) 
{ 
    var stk = [], clr = arguments.callee.caller; 
    while(clr) 
    { 
     stk.push("" + clr); 
     clr = clr.caller; 
    } 
    // Logging stk 
    send_callstack_to_log(stk); 
} 

nhưng chỉ một bước là có thể ngay cả khi callstack là dài hơn nhiều:

(function() 
{ 
function inside() {it.will.be.exception;}; 
function middle() {inside()}; 
function outside() {middle()} 
outside(); 
})(); 

Một bước không thú vị bởi vì các đối số onerror cung cấp cho tôi nhiều thông tin hơn về nó.

Có, tôi đã thử với IE theo bài viết tôi đã đề cập ở trên.

Lưu ý: Tôi cũng đã cố mở một tài khoản trên "ERRORCAEPTION" để thu thập nhật ký lỗi. Tôi đã thử nghiệm nó với IE và "ERRORCAEPTION" nhận ra rằng các lỗi đến từ IE, nhưng tôi không thể tìm thấy bất kỳ thông tin callstack nào trong nhật ký tôi đã có.

+0

Bạn có thể có một cái nhìn tại [stacktrace.js] (https://github.com/eriwen/javascript-stacktrace). Nó là một giải pháp đa trình duyệt. – zeroflagL

Trả lời

1

Hãy xem ở đây: https://github.com/eriwen/javascript-stacktrace

Đó là một trong tôi sử dụng trên Muscula, một dịch vụ như errorception, ngoại trừ nó hoàn toàn miễn phí.

+0

Tôi đã thấy cái này. Nó không giúp tôi bên trong window.onerror. Bên trong try-catch thật dễ dàng để có được stack, nhưng như tôi đã nói trong câu hỏi của tôi - Tôi không thể bọc tất cả mọi thứ trong các khối try-catch. Nhưng cảm ơn vì nỗ lực của bạn. – Alexander

2

Thật không may là nhật ký này sẽ không luôn luôn có sẵn, nó thiếu số dòng, bạn có thể không thực sự dựa vào nó.

Hãy thử https://qbaka.com

Qbaka tự động quá tải loạt các chức năng Javascript như addEventListener, setTimeout, XMLHtppRequest, vv để sai sót xảy ra trong callbacks là tự động được bao bọc bởi try-catch và bạn sẽ nhận stacktraces mà không cần bất kỳ sửa đổi mã.

Các vấn đề liên quan