Nhà phát triển JavaScript đã dành thời gian bằng các ngôn ngữ như C thường bỏ lỡ khả năng sử dụng một số loại nội tâm nhất định, như số dòng ghi nhật ký và phương thức hiện tại được gọi từ. Vâng, nếu bạn đang sử dụng V8 (Chrome, Node.js), bạn có thể sử dụng như sau.Truy cập số dòng trong V8 JavaScript (Chrome & Node.js)
46
A
Trả lời
77
Object.defineProperty(global, '__stack', {
get: function(){
var orig = Error.prepareStackTrace;
Error.prepareStackTrace = function(_, stack){ return stack; };
var err = new Error;
Error.captureStackTrace(err, arguments.callee);
var stack = err.stack;
Error.prepareStackTrace = orig;
return stack;
}
});
Object.defineProperty(global, '__line', {
get: function(){
return __stack[1].getLineNumber();
}
});
console.log(__line);
Ở trên sẽ ghi nhật ký 19
.
Kết hợp với arguments.callee.caller
bạn có thể đến gần hơn với loại đăng nhập hữu ích mà bạn nhận được trong C qua macro.
-2
dường như làm việc này quá trong nút hoặc trình duyệt chrome (có thể là người khác cũng)
line = (o) ->
b = Error.prepareStackTrace
Error.prepareStackTrace = (_, stack) -> stack
e = new Error
Error.captureStackTrace e, o
s = e.stack
Error.prepareStackTrace = b
s[1].getLineNumber()
console.log line this
hay:
lineNumber=(o)->E=Error;p='prepareStackTrace';b=E[p];E[p]=((_,s)->s);e=new E;E.captureStackTrace e,o;s=e.stack;E[p]=b;s[1].getLineNumber()
console.log lineNumber this
+1
Nó hoạt động trong V8 (được sử dụng bởi Chrome và Node.js) sử dụng như đã đề cập trong tiêu đề bài đăng của tôi. –
+8
Mike, tôi nghĩ OP đã nói về JavaScript –
Các vấn đề liên quan
- 1. giới hạn bộ nhớ trong Node.js (và chrome V8)
- 2. Biến số lượt truy cập node.js
- 3. Lỗi trong động cơ V8 V8 của JavaScript khi khớp với dòng đầu tiên?
- 4. Liệu node.js có bất kỳ lợi thế hiệu suất nào trên Javascript phía máy khách (so với Chrome/V8) không?
- 5. .NET Dòng mã Số lượt truy cập
- 6. Truy cập JSON.stringify từ các liên kết C++ node.js
- 7. Facebook cung cấp lỗi "Cố gắng truy cập JavaScript không an toàn bằng JavaScript" trong Chrome
- 8. Truy cập biến EJS trong Javascript Javascript
- 9. ngăn xếp và đống trong V8 (JavaScript)
- 10. Gọi hàm v8 javascript từ C++ với đối số
- 11. Google Javascript v8 - đa luồng
- 12. Phát hiện liên kết đã truy cập trong Chrome
- 13. Truy cập cookie từ ứng dụng chrome
- 14. Truy cập cây cú pháp trừu tượng của động cơ V8
- 15. Mô-đun hệ thống tệp node.js truy cập trong Meteor
- 16. Mã nút Google Plus cảnh báo: "JavaScript không an toàn để truy cập khung" trong Chrome
- 17. Chrome/Firefox: truy cập nguồn mở rộng
- 18. Truy cập nhiều tệp JSON trong JavaScript
- 19. Truy cập vô hạn trong JavaScript quicksort?
- 20. Dòng mới trong Node.js
- 21. Node.js mô-đun v8-profiler sẽ không cài đặt
- 22. Làm thế nào để truy cập localStorage trong node.js?
- 23. Cách truy cập ổ đĩa mạng chia sẻ trong node.js
- 24. Đối tượng hàm đối số trong Node.js khác với JavaScript của JavaScript
- 25. Objects Truy cập trong JSON Array (JavaScript)
- 26. Javascript biến truy cập trong HTML
- 27. Cách truy cập biến javascript trong @ URL.Action()
- 28. Ném ngoại lệ JavaScript từ mã C++ bằng Google V8
- 29. Chạy Động cơ Javascript V8 Standalone
- 30. JavaScript: phát hiện nếu đối số là mảng thay vì đối tượng (Node.JS)
https://code.google.com/p/v8/wiki/ JavaScriptStackTraceApi # Customizing_stack_traces có một danh sách các phương thức khác có sẵn trong API StackTrace v8. Một danh sách chung: getThis, getTypeName, getFunction, getFunctionName, getMethodName, getFileName, getLineNumber, getColumnNumber, getEvalOrigin, isToplevel, isEval, isNative, isConstructor – zamnuts
Xem thêm câu trả lời này cho một số mã mẫu để xuất toàn bộ dấu vết. http://stackoverflow.com/questions/6163807/customized-stack-traces-in-google-chrome-developer-tools/10942404#10942404 –
Bạn có thể xem một số ví dụ về cách sử dụng API này tại đây: https://github.com /jameswomack/capn/blob/master/test/capn.js –