Dấu vết ngăn xếp ngoại lệ Javascript


89

Trong Firefox, tôi có thể lấy dấu vết ngăn xếp của một ngoại lệ bằng cách sử dụng exception.stack.

Có cách nào để có được điều đó trong các trình duyệt khác không?

Chỉnh sửa: Tôi thực sự muốn lưu dấu vết ngăn xếp tự động (nếu có thể) và không gỡ lỗi nó vào thời điểm đó (tức là tôi biết cách lấy dấu vết ngăn xếp trong trình gỡ lỗi).

Câu trả lời:


73

Đặt dòng này ở nơi bạn muốn in dấu vết ngăn xếp:

console.log(new Error().stack);

Lưu ý: đã được tôi kiểm tra trên Chrome 24Firefox 18

Cũng có thể đáng để xem qua công cụ này .


2
Tuyệt vời - Tôi sử dụng kết hợp onerror để lấy số dòng và sau đó bọc dòng vi phạm bằng cách thử bắt và đề xuất của bạn để cảnh báo stacktrace trở lại cho người dùng. `window.onerror = function (message, url, lineNumber) {alert ('message:' + message + '- url:' + url + '- ln:' + lineNumber); trả về true; } Sau đó, bọc nó lại để in ra ngăn xếp. `try {// Một số mã gây ra ngoại lệ. } catch (e) {alert (new Error (). stack); } `
Philip Murphy

bằng cách nào đó chết đi chỉ cho tôi dòng đầu tiên của ngăn xếp. Tôi đang làm gì sai ?? tức là: function foo () {fdasmkl} try {foo ()} catch (e) {err = new Error (e) .stack; console.log (err)} = >>> Error: ReferenceError: fdasmkl is not defined at <anonymous>:6:7thay vì"Error: ReferenceError: fdasmkl is not defined at eval (eval at <anonymous> (:6:1), <anonymous>:1:1) at <anonymous>:6:1"
chitzui

nevermind, đã tìm thấy vấn đề. Vì nó là một lỗi đã có, tôi có thể làm: function foo() { fdasmkl } try { foo() } catch(e) { console.log(e.stack) }ngay lập tức
chitzui

23

Webkit hiện có chức năng cung cấp dấu vết ngăn xếp:

Trình kiểm tra web: Tìm hiểu dấu vết ngăn xếp , được đăng bởi Yury Semikhatsky vào thứ Tư, ngày 20 tháng 4 năm 2011 lúc 7:32 sáng (webkit.org)

Từ bài đăng đó:


1
Tiện lợi hơn nhiều so với việc tạo một ngoại lệ chỉ để xem ngăn xếp của nó.
Alex Churchill,

Liên kết bị hỏng, nhưng tôi nghĩ có một bản sao ở đây pjh0718.blogspot.com/2016/02/…
Stephen Turner

2

Nếu bạn muốn dấu vết ngăn xếp chuỗi, tôi sẽ đi với câu trả lời của insin: stacktrace.js . Nếu bạn muốn truy cập các phần của stacktrace (số dòng, tên tệp, v.v.) stackinfo , thực sự sử dụng stacktrace.js dưới mui xe.


0

Không thực sự, ít nhất là không dễ dàng.

Trong IE, bạn có thể gỡ lỗi quy trình trình duyệt bằng Trình gỡ lỗi tập lệnh MS (vì một số lý do là một thành phần Office) hoặc Visual Studio, sau đó bạn có thể thấy ngăn xếp trên các điểm ngắt.


0

Bạn phải thử thư viện mã nguồn mở tốt TraceKit cố gắng tạo dấu vết ngăn xếp cho các ngoại lệ JavaScript chưa được xử lý trong tất cả các trình duyệt chính. Bạn có thể đọc thêm về Tracekit

https://github.com/csnover/TraceKit/

Tái bút: Nếu bạn đang tìm kiếm một dịch vụ (sử dụng Tracekit) với giao diện người dùng tốt, bạn có thể thử Atatus

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.