2014-04-28 13 views
5

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 
+0

Hãy thử sử dụng giao diện điều khiển 'console.trace()' – Eru

+1

.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

+0

Sau đó, bạn có thể sử dụng 'Lỗi mới(). Ngăn xếp' – Eru

Trả lời

0

Thật không may, tính năng dành riêng cho trình duyệt này hiện không được hỗ trợ trong Firefox hoặc Chrome (và tôi không quen với hỗ trợ của nó trong các trình duyệt khác).

Trong Chrome, bạn có thể làm theo yêu cầu tính năng hiện đang được triển khai tại https://code.google.com/p/chromium/issues/detail?id=357958

Tùy thuộc vào trường hợp sử dụng của bạn và nếu bạn có một số phương tiện chụp sourcemaps mình, Mozilla có một công cụ sourcemapping tuyệt vời mà sẽ cho phép bạn ánh xạ của bạn nguồn/stacktraces tại https://github.com/mozilla/source-map/.

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