console.trace()
xuất kết quả của nó trên bảng điều khiển.
Tôi muốn nhận kết quả dưới dạng chuỗi và lưu chúng vào một tệp.
Tôi không xác định tên cho các chức năng và tôi cũng không thể lấy tên của chúng với callee.caller.name
.
Làm cách nào để có được kết quả của console.trace() dưới dạng chuỗi trong javascript bằng chrome hoặc firefox?
Trả lời
Tôi không chắc chắn về firefox, nhưng trong v8/chrome, bạn có thể sử dụng phương thức trên hàm dựng Lỗi có tên là captureStackTrace
. (More info here)
Vì vậy, một cách hacky để có được nó sẽ là:
var getStackTrace = function() {
var obj = {};
Error.captureStackTrace(obj, getStackTrace);
return obj.stack;
};
console.log(getStackTrace());
Thông thường, getStackTrace
sẽ là trên stack khi nó bị bắt. Đối số thứ hai không bao gồm getStackTrace
không được bao gồm trong theo dõi ngăn xếp.
Cảm ơn thông tin của bạn. Điều đó đã làm việc trong chrome nhưng không trong firefox. Vì vậy, tôi đã tìm kiếm lại và tìm thấy 'Error(). Stack'. trong firefox và tên đối tượng bị mất trong chrome (giống như 'Error.captureStackTrace'),' Error(). stack' hoạt động cả hai trình duyệt và nó cung cấp cho tôi đủ thông tin để gỡ lỗi. –
Lỗi.stack là những gì bạn cần. Nó hoạt động trong Chrome và Firefox. Ví dụ
try { var a = {}; a.debug(); } catch(ex) {console.log(ex.stack)}
sẽ cung cấp trong Chrome:
TypeError: Object #<Object> has no method 'debug'
at eval at <anonymous> (unknown source)
at eval (native)
at Object._evaluateOn (unknown source)
at Object._evaluateAndWrap (unknown source)
at Object.evaluate (unknown source)
và trong Firefox:
@http://www.google.com.ua/:87 _firebugInjectedEvaluate("with(_FirebugCommandLine){try { var a = {}; a.debug() } catch(ex) {console.log(ex.stack)}\n};")
@http://www.google.com.ua/:87 _firebugEvalEvent([object Event])
@http://www.google.com.ua/:67
Cảm ơn câu trả lời của bạn. Nhưng điều đó chỉ hoạt động khi ngoại lệ xảy ra. Tôi cần phải nhận được dấu vết ngăn xếp mà không có ngoại lệ. –
Điều gì về '(lỗi mới) .stack' – JasonSmith
Điều này sẽ ném một ngoại lệ trên a.debug() - đó là một cách tốn kém để có được ngăn xếp, nhưng nên hoạt động. – fijiaaron
Có một thư viện gọi stacktrace.js cung cấp cho bạn qua trình duyệt đống dấu vết. Bạn có thể sử dụng nó chỉ đơn giản bằng cách bao gồm kịch bản và gọi tại bất kỳ điểm:
var trace = printStackTrace();
Tôi sẽ xem https://github.com/stacktracejs/stacktrace.js khi triển khai đã thay đổi để hỗ trợ các lời hứa ES6. –
Lưu ý rằng bây giờ điều này nên được sử dụng: https://github.com/stacktracejs/stacktrace.js/tree/stable?files=1 (phiên bản mới chưa được phát hành) –
này sẽ cung cấp một stack trace (như mảng của chuỗi) cho hiện đại Chrome, Firefox, Opera và IE10 +
function getStackTrace() {
var stack;
try {
throw new Error('');
}
catch (error) {
stack = error.stack || '';
}
stack = stack.split('\n').map(function (line) { return line.trim(); });
return stack.splice(stack[0] == 'Error' ? 2 : 1);
}
Cách sử dụng:
console.log(getStackTrace().join('\n'));
Nó không bao gồm ngăn xếp cuộc gọi của chính nó cũng như tiêu đề "Lỗi" được Chrome và Firefox sử dụng (nhưng không phải IE).
Nó không nên gặp sự cố trên các trình duyệt cũ hơn mà chỉ trả về mảng trống. Nếu bạn cần thêm giải pháp phổ quát, hãy xem stacktrace.js. Danh sách các trình duyệt được hỗ trợ của nó thực sự ấn tượng nhưng đối với tôi, nó rất lớn cho nhiệm vụ nhỏ mà nó dành cho: 37Kb văn bản được rút gọn bao gồm tất cả các phụ thuộc.
Đơn giản, và nó chỉ hoạt động. Cảm ơn. –
Đây chỉ là một cải tiến nhỏ đối với mã tuyệt vời của Konstantin. Nó cắt một chút về các chi phí của ném bắt và chỉ instantiates Lỗi stack:
function getStackTrace() {
let stack = new Error().stack || '';
stack = stack.split('\n').map(function (line) { return line.trim(); });
return stack.splice(stack[0] == 'Error' ? 2 : 1);
}
Tôi thường muốn có một mức độ cụ thể của stack trace (ví logger tùy chỉnh của tôi) vì vậy đây cũng có thể khi gọi:
getStackTrace()[2]; // get stack trace info 2 levels-deep
- 1. "Xem dưới dạng MIME" trong Chrome hoặc Firefox
- 2. Làm cách nào để lấy kết quả từ Danh sách Định dạng của PowerShell dưới dạng chuỗi?
- 3. Làm cách nào để viết regex cho các kết quả khớp chuỗi bắt đầu bằng @ hoặc kết thúc bằng?
- 4. Lưu kết quả print_r vào một biến dưới dạng chuỗi hoặc văn bản
- 5. Chuỗi dưới dạng các mảng của mảng trong javascript
- 6. Làm cách nào để có được regex để tìm mọi kết quả phù hợp trong javascript?
- 7. Làm cách nào để sử dụng XslCompiledTransform khi nhập XML và biến XSL là các chuỗi. Làm cách nào để nhận kết quả chuyển đổi dưới dạng chuỗi?
- 8. chrome/firefox- cách chạy lệnh javascript
- 9. Javascript tời kéo trong Chrome và Firefox
- 10. JavaScript: lưu chuỗi base64 dưới dạng tệp
- 11. Cách getComputedTextLength() đưa ra các kết quả khác nhau trong Chrome và Firefox?
- 12. Làm cách nào để kiểm tra trong Firefox và Chrome nếu plugin được cài đặt
- 13. kết quả của wc dưới dạng biến số
- 14. Làm cách nào để có được giá trị dữ liệu HTML dưới dạng chuỗi với jQuery?
- 15. Javascript: Làm thế nào để có được nhiều trận đấu trong kết quả RegEx .exec
- 16. Làm cách nào để gửi URL có Chuỗi truy vấn dưới dạng Chuỗi truy vấn
- 17. Scala regexps: cách trả về các kết quả phù hợp dưới dạng mảng hoặc danh sách
- 18. Django - Kết quả truy vấn dưới dạng 'kết hợp' dict?
- 19. Tìm kiếm Kết quả đề xuất được hiển thị dưới dạng trống/không có văn bản
- 20. Chạy tệp: // từ Firefox hoặc Chrome
- 21. jQuery - css ('chiều rộng đường viền') trở lại dưới dạng chuỗi trống trên Firefox nhưng không phải trên Chrome
- 22. Tải lên chuỗi nhị phân trong WebKit/Chrome bằng XHR (tương đương với sendAsBinary của Firefox)
- 23. Nếu tôi có id tài liệu mongo dưới dạng chuỗi, làm cách nào để truy vấn nó dưới dạng _id?
- 24. Làm cách nào để định dạng javax.time.Instant dưới dạng chuỗi trong múi giờ địa phương?
- 25. Trong Java và HtmlUnit, làm cách nào để đợi trang kết quả tải xuống và tải xuống dưới dạng HTML?
- 26. Cách kết hợp nhiều cột dưới dạng một và định dạng bằng chuỗi tùy chỉnh?
- 27. Lỗi liên kết Javascript của Google Chrome
- 28. Làm cách nào để định dạng chuỗi bằng nội suy chuỗi trong Scala dưới dạng chuỗi có chiều rộng cố định?
- 29. document.getElementById (id) .focus() không làm việc cho firefox hoặc chrome
- 30. Làm cách nào để gỡ lỗi javascript trong studio trực quan khi ứng dụng asp.net được chạy dưới firefox?
điều này không hoạt động trong PhantomJS: ( – ekkis