Những kỹ thuật nào có thể sử dụng để gỡ lỗi những gì dường như là bế tắc trong một chương trình Java. IDE của tôi là Eclipse và tôi nghĩ rằng tôi đã nhận dạng được hai chuỗi bị khóa. Trong trình gỡ rối, nhấp chuột phải vào bất kỳ chuỗi nào đang được đề cập và chọn tạm dừng tạm dừng chuỗi và hiển thị mã hiện đang được thực hiện. Cố gắng bước vào hoặc bước qua câu hỏi dòng dường như không có hiệu lực - trạng thái luồng thay đổi thành "Bước" với điều khiển không bao giờ quay lại trình gỡ lỗi trừ khi tạm dừng được nhấp lại.
Cảm ơnCách gỡ lỗi bế tắc trong Java bằng cách sử dụng Eclipse
Trả lời
Nếu bạn đang sử dụng Sun JVM, sau đó đính kèm với JConsole và chuyển đến ngăn Chủ đề. Có nút "Phát hiện khóa chết".
Tôi không biết về nhật thực nhưng những gì bạn đang tìm kiếm là một hồ sơ. Hãy thanh toán JProfiler hoặc xem ví dụ this list. Trình lược tả kết nối trực tiếp với JVM và trực quan hóa những gì đang xảy ra bên trong chương trình của bạn trong thời gian thực. Khi deadlocks xảy ra, bạn sẽ có được các đầu mối trực quan/văn bản trong đó các chuỗi có xung đột.
Khi chạy chương trình trong "chế độ bảng điều khiển", bạn có thể nhấn ctrl+break
, cung cấp cho bạn kết xuất chuỗi. Một khi bạn chạy vào bế tắc, điều này có thể hữu ích. Nếu bế tắc không xuất hiện quá thường xuyên, có thể khó nắm bắt được bế tắc như thế này.
Cửa sổ gỡ lỗi hiển thị các ngăn xếp của các luồng khác nhau sẽ cho biết khi nào một chuỗi dừng. Khi hai luồng được dừng lại, bạn có thể kiểm tra những gì từng luồng đang chờ. Tìm một điểm chung sẽ cho bạn biết nguồn gốc của bế tắc.
Tôi muốn giới thiệu cách sử dụng một công cụ phân tích tĩnh như
, mà thường có thể phát hiện Deadlocks tại thời gian biên dịch
Một vài phút trước, tôi stumbled khi này:
http://runnerwhocodes.blogspot.com/2007/10/deadlock-detection-with-eclipse.html
Đối với tôi, có vẻ như cách tiếp cận tốt nhất phát hiện deadlocks (thậm chí nó sẽ không trợ giúp trong từng trường hợp, ví dụ: phát hiện deadlocks kết hợp với EMT-Locks).
- 1. Làm cách nào để gỡ lỗi bế tắc?
- 2. java VirtualMachine.getSystemProperties() bế tắc
- 3. Gỡ lỗi từ xa Weblogic bằng cách sử dụng eclipse
- 4. Bế tắc bế tắc
- 5. Cách gỡ lỗi các sự cố bế tắc trong hạt nhân
- 6. Delphi threads bế tắc
- 7. Cách dừng gỡ lỗi trong ứng dụng Android trong Eclipse
- 8. Làm thế nào để gỡ lỗi ứng dụng Java bằng cách sử dụng VIM/GVIM?
- 9. Whats phím tắt để gỡ lỗi trong PyDev bằng cách sử dụng Eclipse
- 10. Làm cách nào để gỡ lỗi đúng cách Java (Android) bằng Eclipse?
- 11. Eclipse SDK Android - 'Xây dựng Workspace' bế tắc
- 12. Bế tắc trong mã ruby sử dụng SizedQueue
- 13. Chạy/gỡ lỗi ứng dụng OSGi trong Eclipse
- 14. REMOTELY Gỡ lỗi PHP Sử dụng Eclipse
- 15. cách giải quyết vấn đề bế tắc?
- 16. Gỡ lỗi Node.js bằng Eclipse
- 17. Gỡ lỗi LLVM bằng Eclipse
- 18. Cách khôi phục từ ngoại lệ bế tắc trong SqlDataReader.Đọc()
- 19. Sử dụng Timeout để tránh bế tắc trong đa luồng Java
- 20. Khi nào là bế tắc không phải là bế tắc?
- 21. Kiểm tra đơn vị gỡ lỗi chạy trên dòng cmd bằng cách sử dụng Eclipse
- 22. Không thể gỡ lỗi trong Java với eclipse
- 23. Bế tắc trong một chương trình java đơn luồng
- 24. Trace một bế tắc trong Ruby
- 25. Lỗi bế tắc được phát hiện trong hàm PL/pgSQL
- 26. Java: gỡ lỗi bằng SwingUtilities.invokeLater()
- 27. Gỡ lỗi ứng dụng FuseESB trong Eclipse
- 28. Bế tắc trong mã đồng thời.futures
- 29. Làm cách nào để chặn ngoại lệ bế tắc kênh?
- 30. Java wait()/join(): Tại sao điều này không bế tắc?
YourKit có thể hiện tốt nhất các chủ đề và đôi khi thậm chí nó có thể tự động phát hiện bế tắc. – nanda