Nếu tôi đang đọc chính xác giữa các dòng ở đây, vấn đề là ngoại lệ của bạn đang 'biến mất' một cách hiệu quả mặc dù hành vi trình gỡ lỗi mặc định sẽ phá vỡ trên các ngoại lệ không được xử lý.
Nếu bạn có các phương thức không đồng bộ, bạn có thể gặp phải sự cố này vì các ngoại lệ không bắt được trên luồng nhóm luồng như một phần của phần tiếp tục Tác vụ không được coi là ngoại lệ chưa được xử lý. Đúng hơn, chúng được nuốt và lưu trữ cùng với Task.
Ví dụ: hãy xem mã này:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
Nếu bạn chạy chương trình này với cài đặt trình gỡ lỗi mặc định (chỉ dừng ở các trường hợp ngoại lệ chưa được khắc phục), trình gỡ lỗi sẽ không bị hỏng. Điều này là do luồng nhóm luồng được phân bổ cho phần tiếp theo nuốt ngoại lệ (chuyển nó đến cá thể Tác vụ) và tự giải phóng trở lại nhóm.
Lưu ý rằng, trong trường hợp này, vấn đề thực sự là hàng Task
trả về Test()
không bao giờ được kiểm tra. Nếu bạn có các loại logic 'fire-and-forget' tương tự trong mã của mình, thì bạn sẽ không thấy các ngoại lệ tại thời điểm chúng được ném (ngay cả khi chúng được 'xử lý' bên trong phương thức); ngoại lệ chỉ hiển thị khi bạn quan sát Tác vụ bằng cách chờ nó, kiểm tra Kết quả của nó hoặc xem xét rõ ràng Ngoại lệ của nó.
Đây chỉ là phỏng đoán, nhưng tôi nghĩ có khả năng bạn đang quan sát điều gì đó như thế này.
Tool
hoặcWindow
tab sẽ có tất cả các vị trí mong muốn. Trong trường hợp của bạn, bạn đang tìm Cài đặt Ngoại lệ .