2010-08-06 26 views
9
int i=0; 
try{ 
    int j = 10/i; 
} 
catch(IOException e){} 
finally{ 
    Console.WriteLine("In finally"); 
    Console.ReadLine(); 
} 

Khối cuối cùng dường như không thực thi khi nhấn F5 trong VS2008. Tôi đang sử dụng mã này trong Ứng dụng Console.cuối cùng dường như không thực hiện trong ứng dụng giao diện điều khiển C# khi đang sử dụng F5

+0

+1 để dạy tôi điều gì đó mới mẻ về hành vi của trình gỡ lỗi! –

Trả lời

9

Trình gỡ lỗi Visual Studio tạm dừng thực thi khi bạn nhận được một ngoại lệ không bắt buộc (trong trường hợp này là phân chia bằng không ngoại lệ). Trong chế độ gỡ lỗi, Visual Studio thích thực hiện ngắt và cung cấp cho bạn hộp bật lên tại nguồn của lỗi thay vì cho phép ứng dụng gặp sự cố. Điều này là để giúp bạn tìm ra các lỗi vô hình và sửa chúng. Điều này sẽ không xảy ra nếu bạn tháo gỡ trình gỡ lỗi.

Thử chạy trong chế độ phát hành từ bảng điều khiển mà không cần trình gỡ lỗi đính kèm và bạn sẽ thấy thông báo của mình.

+0

Đã cố gắng ... Đã cập nhật câu hỏi. –

+0

Vâng mà không gỡ lỗi tôi có thể xem tin nhắn. Vì vậy, điều này có nghĩa là trong chế độ gỡ lỗi cuối cùng sẽ không thực hiện. –

+0

@Nadeem: Không, nó không có nghĩa là. Tôi có nghĩa là ngoại lệ của bạn là unhandled và gây ra các trình gỡ lỗi để phá vỡ thực hiện. Nếu bạn xử lý ngoại lệ thì mọi thứ sẽ hoạt động như bạn mong đợi. –

1

F5 tiếp tục ứng dụng cho đến điểm ngắt tiếp theo hoặc ngoại lệ chưa được xử lý.

Tôi nghĩ bạn nên sử dụng F10 thay vì gỡ lỗi từng bước hoặc bật vi phạm cho tất cả ngoại lệ (được xử lý hay không).

+0

Không hoạt động cho một trong hai F10 hoặc F11 –

+0

Bạn có đang biên soạn trong chế độ Phát hành không? – leppie

+0

đã thử trong cả bản phát hành và gỡ lỗi –

0

Không chạy ứng dụng của bạn qua F5. Trong chế độ gỡ lỗi, bạn không thể bỏ qua ngoại lệ, hộp thông báo sẽ bật lên một lần nữa và một lần nữa.

Thay vì xây dựng nó và chạy qua CMD, Far Manager, vv

+0

Vì vậy, cuối cùng nó có nghĩa là trong chế độ gỡ lỗi cuối cùng sẽ không được thực hiện. –

+0

Tất nhiên bạn có thể bỏ qua ngoại lệ, theo mặc định nó sẽ bỏ qua tất cả các ngoại lệ được xử lý. Thứ hai, bạn có thể di chuyển con trỏ hướng tới dòng tiếp theo .... – leppie

+0

@Nadeem: Cuối cùng sẽ luôn thực thi bất kể. – leppie

0

Khi kết luận cuối cùng tất cả chúng ta nên đồng ý, nếu có một ngoại lệ unhandled và ứng dụng đang chạy trong chế độ gỡ lỗi, cuối cùng sẽ không được thực thi .

2

Nếu bạn muốn nó để thực thi trong khi gỡ lỗi có hai điều bạn có thể làm:

1) Catch the ngoại lệ chính xác:


    int i = 0; 
    try 
    { 
     int j = 10/i; 
    } 
    catch(DivideByZeroException e){} 
    finally 
    { 
     Console.WriteLine("In finally"); 
     Console.ReadLine(); 
    } 
 

2) Nói với Visual Studio để bỏ qua unhandled trường hợp ngoại lệ. Đi đến Debug -> Exceptions, và sau đó bạn có thể bỏ chọn tùy chọn Common Language Runtime Exceptions "User-unhandled", hoặc bạn có thể mở rộng nút đó và bỏ chọn từng loại ngoại lệ.

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