Tổng quan:
Đầu ra dấu vết ngăn xếp trong bảng điều khiển trình duyệt không giống với dấu vết được trả về khi Error.stack được gọi. Theo dõi ngăn xếp của bàn điều khiển dường như tính đến các lần sourcemaps trong khi dấu vết stack Error.stack thì không.Dấu vết ngăn xếp sử dụng ánh xạ nguồn
Đầu ra bảng điều khiển
Đây là dấu vết ngăn xếp mặc định được xuất ra bàn điều khiển.
Uncaught TypeError: Cannot set property 'y' of undefined source.js:4
(anonymous function) source.js:4
(anonymous function) source.js:4
(anonymous function) (index):17
Error.stack Output
Đây là stack trace từ Error.stack:
TypeError: Cannot set property 'y' of undefined
at <anonymous>:1:37
at <anonymous>:1:60
at http://localhost:63342/source-map-example/example2/:17:23 (index):12
Source Code:
Đây là mã mà tôi sử dụng cho thí nghiệm này:
<script>
window.onerror = function() {
console.log(arguments[4].stack);
}
var script = document.createElement('script');
script.textContent = '(function(){var person={};person.x.y="Throws an error..."})();//# sourceMappingURL=source.min.map';
document.body.appendChild(script);
</script>
Câu hỏi:
Có thể lập trình theo dõi ngăn xếp bao gồm tham chiếu đến tệp & dòng dựa trên sourcemap được liên kết không?
Edit:. Console.trace và Lỗi mới() ngăn xếp
lưu ý: Tôi không sử dụng window.onerror cho các ví dụ này, thay vào đó tôi quấn JS nhúng trong một thử ... bắt và cố gắng sử dụng các phương pháp này trong quá trình đánh bắt. Lý do cho điều này là do dấu vết ngăn xếp không cung cấp bất kỳ dấu vết nào vào JS được nhúng cho một trong hai phương thức khi được sử dụng trong window.onerror.
console.trace() hoạt động tốt nhất, nhưng tất nhiên đầu ra không thể chụp được. Mặc dù vậy, điều này không hoạt động như mong đợi. Đầu ra chứa một dấu vết ngăn xếp trỏ đến dòng console.trace() và ít khác.
console.trace() source.js:9
(anonymous function) source.js:9
(anonymous function) source.js:9
(anonymous function)
ngăn xếp mới() .không hoạt động như mong đợi. Nó có chứa một dấu vết ngăn xếp, nhưng nó không sử dụng sourcemap.
Error
at <anonymous>:1:85
at <anonymous>:1:105
at http://localhost:63342/source-map-example/example2/:18:23 source.js:18
Hãy thử sử dụng giao diện điều khiển 'console.trace()' – Eru
.chỉ cần xuất ra bàn điều khiển, nếu tôi có thể thu được kết quả đầu ra mà giao diện điều khiển sẽ in ra bàn điều khiển thì điều đó là đủ. Tuy nhiên tôi không chắc chắn nếu điều đó là có thể? – KarlPurk
Sau đó, bạn có thể sử dụng 'Lỗi mới(). Ngăn xếp' – Eru