2010-08-26 30 views
48

Tôi gặp sự cố rò rỉ bộ nhớ trong một dự án JavaScript khá phức tạp và tôi hy vọng rằng có các công cụ có thể giúp tôi xác định nguyên nhân của sự cố.Công cụ để gỡ lỗi rò rỉ bộ nhớ trong JavaScript

Tôi đã thử tab Công cụ dành cho nhà phát triển Google Chrome, nơi tôi có thể chụp nhanh ảnh chụp HEAP và phát lại ảnh chụp nhanh trước đó (kiểm tra http://www.youtube.com/GoogleDevelopers#p/c/B9EC47A6AAE4540F/1/OxW1dCjOstE để bắt đầu tính năng đó).

Tôi có thể thấy bộ nhớ thoát với công cụ này nhưng từ đó tôi không thể tìm thấy cách để phát hiện nơi tham chiếu đến đối tượng của tôi được lưu giữ (có thể trong bao đóng).

Câu hỏi của tôi là: Bạn sử dụng công cụ nào để gỡ lỗi rò rỉ bộ nhớ JavaScript? Có một công cụ có thể cho tôi xem các tài liệu tham khảo và một chút mã nguồn của nơi chúng được tổ chức không?

+0

Tôi nghĩ câu hỏi của bạn không phải là ontopic ở đây (nó không phải là một câu hỏi lập trình, nhưng yêu cầu một phần mềm), nhưng nó có thể là ontopic trên http://softwarerecs.stackexchange.com. – peterh

Trả lời

31

tôi dường như chạy vào vấn đề này thường xuyên và không bao giờ thực sự có một câu trả lời tuyệt vời khác hơn chọn điểm ngắt thông minh trong javascript của bạn. Đôi khi có một công cụ cho tình huống cụ thể của bạn có thể giúp tìm ra vấn đề, lần khác đối với tôi đó là một quá trình lâu dài để tìm ra sự rò rỉ.

Nhìn vào Allocation profiler trong Chrome DevTools cung cấp cho bạn giao diện người dùng cho phân bổ của bạn, sau đó cho phép bạn quay lại với người lưu giữ.

Dưới đây là good list of leak tools for Mozilla. Ngoài ra, có một số screencasts of how to use the tools. Đặc biệt, bạn có thể quan tâm đến phần "Xử lý sau dấu vết ngăn xếp" vì nó đề cập đến việc có thể nhận được các biểu tượng tốt hơn và thông tin về tên/số dòng của tệp từ một dấu vết ngăn xếp.

Nếu bạn đồng ý sử dụng Internet Explorer trên Windows, đây là JavaScript Memory Leak Detector cũng có thể hữu ích.

Cuối cùng, tôi tìm thấy công cụ tốt này trên github được gọi là MemoryLeakChecker sau khi đọc post here, tìm kiếm cấu trúc dữ liệu lớn và cố gắng giúp bạn xác định nơi bạn đang rò rỉ bộ nhớ.

Hy vọng điều này sẽ giúp và cho tôi biết cái nào (nếu có) sẽ giúp bạn. Xin lỗi vì thiếu các siêu liên kết thực sự, bởi vì tôi có dưới 10 danh tiếng ngay bây giờ tôi không thể đặt tất cả chúng vào bài đăng.

0

Hãy xem https://addons.mozilla.org/en-US/firefox/addon/2490/ Tôi chưa thử nhưng dường như có một số tính năng tốt.

+0

Tôi sẽ thử nhưng có vẻ như dành riêng cho một loại rò rỉ cụ thể với các tham chiếu liên cửa sổ khi cửa sổ đóng lại. ứng dụng của tôi là ứng dụng ajax 1 cửa sổ không bao giờ đóng –