Tôi đang tìm một cách để gỡ lỗi một phần hiếm Delphi 7 phần quan trọng (TCriticalSection) treo/bế tắc. Trong trường hợp này, nếu một chuỗi đang chờ trên một phần quan trọng trong hơn 10 giây, tôi muốn tạo báo cáo với dấu vết ngăn xếp của cả hai luồng hiện đang khóa phần quan trọng và cũng là chuỗi không thể thực hiện được để khóa phần quan trọng sau khi chờ 10 giây. Đó là OK sau đó nếu một ngoại lệ được nâng lên hoặc các ứng dụng chấm dứt.Delphi: Gỡ lỗi phần quan trọng treo bằng cách báo cáo ngăn xếp cuộc gọi của chủ đề đang chạy trên khóa "thất bại"
Tôi muốn tiếp tục sử dụng các phần quan trọng, thay vì sử dụng các nguyên tắc đồng bộ hóa khác, nếu có thể, nhưng có thể chuyển đổi nếu cần thiết (chẳng hạn như để có tính năng hết thời gian chờ).
Nếu công cụ/phương pháp hoạt động ở thời gian chạy ngoài IDE, đây là phần thưởng vì điều này khó tái tạo theo yêu cầu. Trong trường hợp hiếm hoi, tôi có thể sao chép bế tắc bên trong IDE, nếu tôi cố gắng tạm dừng để bắt đầu gỡ lỗi, IDE chỉ ngồi đó không làm gì cả, và không bao giờ đến trạng thái mà tôi có thể xem chủ đề hoặc ngăn xếp cuộc gọi. Tôi có thể thiết lập lại chương trình đang chạy.
Cập nhật: Trong trường hợp này, tôi chỉ xử lý một phần quan trọng và 2 luồng, vì vậy đây có thể không phải là vấn đề đặt hàng khóa. Tôi tin rằng có một nỗ lực lồng nhau không đúng cách để nhập khóa qua hai luồng khác nhau, dẫn đến bế tắc.
+1 đối với kiểm tra cố định chủ đề của MadExcept. –
madExcept cũng có thể được yêu cầu lấy một chuỗi kết xuất bất kỳ lúc nào, vì vậy có lẽ lý tưởng cho việc này. – mj2008
madExcept trông giống như lựa chọn tốt nhất. Cảm ơn! – Anagoge