2011-08-31 35 views
5

Trong một chương trình, tôi vô tình gọi số closeHandle() hai lần trên bộ xử lý mutex (đóng chốt xử lý đã đóng).Các lỗi ngoại lệ nhất định chỉ xảy ra trong trình gỡ rối không?

Khi chạy mã trong trình gỡ lỗi, tôi đã nhận được lỗi ngoại lệ An invalid HANDLE was specified. như mong đợi.

Tuy nhiên, chạy chương trình "bình thường" như một đứng độc lập (bên ngoài trình gỡ lỗi) ngoại lệ không xuất hiện hoặc bất kỳ lỗi nào khác. Chương trình xuất hiện để chạy bình thường.

Đây có phải chỉ là một cài đặt trong Visual Studio.NET 2003 hoặc có nhiều hơn không?

+6

Hành vi được ghi lại là tài liệu của closeHandle(). Xem http://msdn.microsoft.com/en-us/library/ms724211%28v=vs.85%29.aspx: "Nếu ứng dụng đang chạy dưới trình gỡ lỗi, hàm sẽ ném một ngoại lệ nếu nó nhận hoặc là xử lý giá trị không hợp lệ hoặc giá trị xử lý giả. " – user168715

+0

Có lẽ bạn đang chạy bản dựng gỡ lỗi trong VS .NET, nhưng khi nhấp đúp vào bạn đang chạy bản phát hành bản phát hành? –

+0

Tôi đã thấy hành vi tương tự với các xác nhận. Biên dịch có điều kiện có thể làm điều đó. –

Trả lời

5

Các documentation trạng thái:

Nếu ứng dụng đang chạy dưới một trình gỡ lỗi, chức năng sẽ ném một ngoại lệ nếu nó nhận được một trong hai giá trị xử lý đó không phải là hợp lệ hay một giá trị giả xử lý. Điều này có thể xảy ra nếu bạn đóng một xử lý hai lần, hoặc nếu bạn gọi CloseHandle trên một tay cầm được trả về bởi hàm FindFirstFile thay vì gọi hàm FindClose.

+0

"Ném ngoại lệ" ?! Tôi mong đợi các nhà văn tài liệu MSDN sẽ biết rõ hơn. Các hàm C không ném ngoại lệ. Trong bối cảnh của các ngoại lệ Win32 (còn gọi là Xử lý ngoại lệ có cấu trúc), các ngoại lệ được * nâng lên *, không bị ném. –

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