Firebug có khả năng ghi lại các cuộc gọi đến một tên hàm cụ thể. Tôi đang tìm một lỗi mà đôi khi dừng một trang hiển thị, nhưng không gây ra bất kỳ lỗi hoặc cảnh báo nào. Lỗi chỉ xuất hiện khoảng một nửa thời gian. Vì vậy, làm thế nào để tôi có được một danh sách của tất cả các cuộc gọi chức năng cho toàn bộ chương trình, hoặc một số loại dấu vết stack để thực hiện toàn bộ chương trình?In nhật ký chức năng/theo dõi ngăn xếp cho toàn bộ chương trình bằng cách sử dụng firebug
Trả lời
Firefox providesconsole.trace()
rất tiện dụng để in ngăn xếp cuộc gọi. Nó cũng có sẵn trong Chrome và IE 11.
Ngoài ra thử một cái gì đó như thế này:
function print_call_stack() {
var stack = new Error().stack;
console.log("PRINTING CALL STACK");
console.log(stack);
}
Thử lần lượt từng bước một hoặc một hàm để xác định nơi nó dừng hoạt động chính xác. Hoặc thực hiện một số phỏng đoán hợp lý và phân tích các câu lệnh ghi nhật ký thông qua mã của bạn.
Điều này. Chắc chắn thêm một tải của 'console.log ('cái gì')' báo cáo cho các chức năng của bạn để xem những cái nào (và không) được gọi là – Gareth
Chương trình là rất lớn, vì vậy tôi đang tìm kiếm một cách để so sánh các bản ghi chức năng cho khi chương trình chạy chính xác so với khi chương trình không hoạt động. – amccormack
Tôi đồng ý rằng điều này sẽ hữu ích. Tôi đang bước vào để sở hữu một cơ sở mã lớn và cái gì đó có thể tạo ra một dấu vết chạy của tất cả các cuộc gọi hàm chắc chắn sẽ giúp bạn hiểu được luồng/hình dạng của mã và phát hiện mã chết. –
Khi tôi cần một vết đống tôi làm những điều sau đây, có thể bạn có thể rút ra một số cảm hứng từ nó:
function logStackTrace(levels) {
var callstack = [];
var isCallstackPopulated = false;
try {
i.dont.exist += 0; //doesn't exist- that's the point
} catch (e) {
if (e.stack) { //Firefox/chrome
var lines = e.stack.split('\n');
for (var i = 0, len = lines.length; i < len; i++) {
callstack.push(lines[i]);
}
//Remove call to logStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
else if (window.opera && e.message) { //Opera
var lines = e.message.split('\n');
for (var i = 0, len = lines.length; i < len; i++) {
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
var entry = lines[i];
//Append next line also since it has the file info
if (lines[i + 1]) {
entry += " at " + lines[i + 1];
i++;
}
callstack.push(entry);
}
}
//Remove call to logStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
}
if (!isCallstackPopulated) { //IE and Safari
var currentFunction = arguments.callee.caller;
while (currentFunction) {
var fn = currentFunction.toString();
var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf("(")) || "anonymous";
callstack.push(fname);
currentFunction = currentFunction.caller;
}
}
if (levels) {
console.log(callstack.slice(0, levels).join('\n'));
}
else {
console.log(callstack.join('\n'));
}
};
Moderator của note: Các mã trong câu trả lời này dường như cũng xuất hiện trong this post from Eric Wenderlin's blog. Tác giả của câu trả lời này tuyên bố nó là mã riêng của mình, mặc dù, được viết trước khi bài đăng trên blog được liên kết tại đây. Chỉ vì mục đích thiện chí, tôi đã thêm liên kết vào bài đăng và ghi chú này.
Có một cuộc gọi console.trace() mà bạn có thể thực hiện trong Firebug để thực hiện điều này. – amccormack
Điều này thật tuyệt vời. Firebug có vấn đề với các tệp được rút gọn, tập lệnh này thực hiện điều đó! – pstadler
FWIW @ andrew-barber, tác giả của câu trả lời không bao giờ được tuyên bố là của riêng mình. Chỉ cần không thuộc tính. Chỉnh sửa của bạn phải là nhận xét. – Ascherer
tôi thực hiện điều này mà không firebug. Thử nghiệm ở cả chrome và firefox:
console.error("I'm debugging this code.");
Khi chương trình của bạn in bảng điều khiển, bạn có thể nhấp vào mũi tên nhỏ để mở rộng ngăn xếp cuộc gọi.
- 1. in ngăn xếp hiện tại trong nhật ký
- 2. Thay đổi bộ nhớ ngăn xếp từ chương trình C
- 3. Làm cách nào để in nội dung của ngăn xếp trong chương trình C?
- 4. Làm thế nào để ngăn chặn tràn ngăn xếp bằng cách theo dõi kích thước ngăn xếp?
- 5. printf bằng cách sử dụng ngăn xếp?
- 6. Thường xuyên theo dõi một chương trình/quy trình bằng cách sử dụng Python
- 7. Sử dụng vùng bộ nhớ làm không gian ngăn xếp?
- 8. In một ngăn xếp theo dõi để stdout trên lỗi trong Django trong khi sử dụng manage.py runserver
- 9. Lỗi theo dõi ngăn xếp
- 10. Sử dụng chú thích để ghi nhật ký theo dõi
- 11. Làm thế nào để thực hiện chương trình một bộ thử nghiệm bằng cách sử dụng JUnit4 theo chương trình?
- 12. Ghi nhật ký bằng cách sử dụng chú thích jcabi @Loggable trims nhật ký
- 13. Không theo dõi ngăn xếp từ NSAssert
- 14. Thực hiện ngăn xếp bằng cách sử dụng BST
- 15. Theo dõi ngăn xếp Java trên Windows
- 16. Django: manage.py không in theo dõi ngăn xếp cho các lỗi
- 17. Ghi dữ liệu nhật ký vào nhật ký hệ thống bằng cách sử dụng log4j
- 18. Nhận toàn bộ ngăn xếp DOM dưới dạng chuỗi
- 19. có thể viết chương trình in mã nguồn riêng của mình bằng cách sử dụng "chức năng tạo chuỗi"
- 20. Không đủ ngăn xếp để tiếp tục thực hiện chương trình một cách an toàn. ASP.NET MVC 4
- 21. Nhật ký bảng điều khiển Firebug Net
- 22. Cách lấy Bộ nhớ được Chương trình Delphi sử dụng
- 23. Trình biên dịch có được phép tối ưu hóa việc sử dụng bộ nhớ ngăn xếp bằng cách sắp xếp lại các biến cục bộ không?
- 24. PHP: nhật ký ngăn xếp dấu vết cho lỗi FATAL trong sản xuất
- 25. Cách tăng phân bổ bộ nhớ cho chương trình
- 26. Tại sao .NET không ghi nhật ký ngăn xếp cho các ngoại lệ StackOverflow?
- 27. Cách in dấu vết ngăn xếp của StackOverflowException
- 28. Theo dõi ngăn xếp dưới dạng Chuỗi
- 29. "con trỏ" này bị lỗi trong theo dõi ngăn xếp
- 30. Làm cách nào để xem tiến trình truyền tệp (nhật ký) bằng cách sử dụng paramiko?
+1 console.trace() – chim
đây là genious :) – iamawebgeek
Có cách nào để tăng chiều dài của ngăn xếp không? Điều đó sẽ rất hữu ích. –