2010-01-17 34 views
9

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

10

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".

0

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.

+1

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

1

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.

0

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.

-1

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ư

FindBugs

, mà thường có thể phát hiện Deadlocks tại thời gian biên dịch

Các vấn đề liên quan