“Ngoại lệ cơ hội đầu tiên” là gì?


Câu trả lời:


78

Đó là một khái niệm gỡ lỗi. Về cơ bản, các ngoại lệ được ném cho trình gỡ lỗi trước và sau đó đến chương trình thực tế, nơi nếu nó không được xử lý, nó sẽ được ném đến trình gỡ lỗi lần thứ hai , cho bạn cơ hội thực hiện điều gì đó với nó trong IDE của bạn trước và sau chính ứng dụng. Đây dường như là một phát minh của Microsoft Visual Studio.


21
Nó không chỉ là một khái niệm gỡ lỗi; C # không cung cấp một phương tiện thuận tiện để quan sát việc xử lý ngoại lệ hai lần trong thời gian chạy, nhưng vb.net thì có. Về cơ bản, khi một ngoại lệ được ném ra, thời gian chạy bắt đầu bằng cách tìm kiếm ngăn xếp cuộc gọi để tìm xem ai sẽ bắt được nó. Quá trình đó diễn ra trước khi bất kỳ finallykhối nào chạy. Khi hệ thống quyết định ai sẽ bắt một ngoại lệ (và xác định rằng ai đó thực sự sẽ mắc phải), hệ thống sẽ bắt đầu tháo ngăn xếp. Lưu ý rằng nếu một ngoại lệ được ném ra từ một finallykhối ...
supercat

17
... mã được mong đợi để bắt ngoại lệ ban đầu có thể không làm như vậy; có nhiều trường hợp góc kỳ lạ.
supercat

5
Điều này xảy ra khi bạn đã định cấu hình trình gỡ lỗi để phá vỡ tất cả các ngoại lệ đã ném (không chỉ các ngoại lệ không được xử lý), hoặc nếu bạn "bước" vào một số câu lệnh ném. Bạn thấy thông báo Một ngoại lệ cơ hội đầu tiên của loại 'foo' xảy ra trong YourApp.exe . Bạn vẫn có thể tiếp tục (F5) hoặc bước xa hơn (F11). Sau đó, nếu có một catchcho điều này, kiểm soát sẽ đến đó. Nếu không có catchkhối nào , bạn sẽ nhận được lỗi "cơ hội thứ hai", lần này thông báo là Một ngoại lệ không được xử lý của loại 'foo' xảy ra trong YourApp.exe . Từ đây, cố gắng tiếp tục hoặc bước xa hơn sẽ không thành công.
Jeppe Stig Nielsen

@supercat: Làm cách nào để tìm hiểu về các chi tiết như bạn đã đề cập trong phần nhận xét ở trên? Nó có phải là kết quả của quá trình tự thử nghiệm? đọc sách (cái nào)? Đó là một cái nhìn sâu sắc rất ấn tượng! Tôi sẽ đánh giá cao nếu bạn có thể dành một chút thời gian để trả lời câu hỏi này ...
anish

2
@NoSaidTheCompiler: Tôi đã đọc về cách xử lý ngoại lệ trong các blog khác nhau; Tôi hy vọng rằng một tìm kiếm cho "bộ lọc ngoại lệ .net" sẽ làm xuất hiện một số blog về chủ đề này.
supercat


4

Tôi vừa mới bắt đầu sử dụng trình gỡ lỗi và gặp sự cố này. Trong nghiên cứu của mình, tôi đã tìm thấy bài đăng trên blog MSDN Ngoại lệ cơ hội đầu tiên là gì? điều đó đã giải tỏa cho tôi.

Điểm mấu chốt từ bài đăng trên blog đối với tôi là nó đề cập đến thông báo cho trình gỡ lỗi và không phải thứ mà mã của tôi nhất thiết phải xử lý và quan trọng nhất, "Thông báo ngoại lệ cơ hội đầu tiên thường không có nghĩa là có vấn đề trong mã. "


Vui lòng đặt một đoạn trích ( không phải toàn bộ bài viết ) những gì bạn thấy hữu ích từ liên kết đó. Có một câu trả lời chỉ liên kết trước đó với cùng một liên kết đã bị xóa.
Mark Hall

Điểm mấu chốt đối với tôi là nó đề cập đến thông báo cho trình gỡ lỗi và không phải là thứ mà mã của tôi nhất thiết phải xử lý và quan trọng nhất, "Thông báo ngoại lệ cơ hội đầu tiên thường không có nghĩa là có vấn đề trong mã."
codingatty

Tôi đã thêm nhận xét của bạn vào câu trả lời của bạn, tôi cảm thấy rằng liên kết đủ quan trọng để giữ lại, tôi đang cố gắng đảm bảo rằng nó sẽ không được coi là một câu trả lời chỉ liên kết như lần trước mà nó được đưa ra.
Mark Hall

0

Khi một ứng dụng đang được gỡ lỗi, trình gỡ lỗi sẽ được thông báo bất cứ khi nào gặp một ngoại lệ. Tại thời điểm này, ứng dụng bị treo và trình gỡ lỗi quyết định cách xử lý ngoại lệ. Lần đầu tiên đi qua cơ chế này được gọi là ngoại lệ "cơ hội đầu tiên".

Tùy thuộc vào cấu hình của trình gỡ lỗi, nó sẽ tiếp tục ứng dụng và chuyển ngoại lệ hoặc nó sẽ khiến ứng dụng bị treo và vào chế độ gỡ lỗi. Nếu ứng dụng xử lý ngoại lệ, nó tiếp tục chạy bình thường.

Thông báo ngoại lệ cơ hội đầu tiên thường không có nghĩa là có vấn đề trong mã. Đối với các ứng dụng / thành phần xử lý ngoại lệ một cách duyên dáng, thông báo ngoại lệ cơ hội đầu tiên cho nhà phát triển biết rằng đã gặp phải tình huống ngoại lệ và đã được xử lý.


0

Từ quan điểm của nhà phát triển, nó liên quan nhiều hơn đến một ngoại lệ cơ hội thứ hai, bởi vì nó có nghĩa là nó không được xử lý trong mã ; do đó ứng dụng sẽ dừng lại.

Cơ hội đầu tiên có thể có nhiều người trong số họ, nhưng những thứ cần quan tâm hơn, một lần nữa, từ góc độ phát triển, là cơ hội thứ hai, vì nó sẽ dẫn đến sự cố ứng dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.