2011-10-21 33 views
6

Tôi đang sử dụng Visual Studio 2010 để viết một NET khẳng định:Debug.Assert() chỉ kích hoạt khi bước qua nó

Debug.Assert(false, "Testing Debug.Assert"); 

Khi tôi đặt một breakpoint trên dòng mã này, đợi cho đến khi breakpoint lượt truy cập và sau đó để chương trình tiếp tục chạy, mọi thứ hoạt động tốt: hộp thoại "Xác nhận không thành công" bật lên. Tuy nhiên, khi tôi loại bỏ điểm ngắt và chạy lại ứng dụng, câu lệnh Debug.Assert() chỉ đơn giản là bị bỏ qua.

Có ai có ý tưởng gì có thể gây ra hành vi rất lạ này không?

+2

Bạn có 100 % nào đó bạn đang chạy phiên bản gỡ lỗi? Tôi biết đây là một câu hỏi có khả năng ngu ngốc - nhưng tôi đã làm điều này bản thân mình nhiều lần. – ChrisF

+0

Khi bạn "chạy lại ứng dụng", bạn có đang chạy nó trong trình gỡ lỗi hay không? (F5 hoặc Ctrl-F5?) Bạn có đang sử dụng ấn bản Express không? –

+0

Thử xây dựng lại ứng dụng – xanatos

Trả lời

3

Một đồng nghiệp của tôi ngay lập tức biết vấn đề là gì. Tôi đã phải kích hoạt cờ "Enable Just My Code" tại "Visual Studio 2010/Menu/Options/Debugging/General". Rõ ràng đây là một bug in Visual Studio 2010".

2

Tôi đã gặp phải sự cố tương tự. Sử dụng Trace.Assert hoạt động như mong đợi.


Vâng, Trace.Assert bắt đầu thể hiện cùng hành vi trong phiên gỡ lỗi tiếp theo.


Ah, đã phát hiện sự cố.

  • Với 'Enable Just My Code"

    • Nếu được chọn. 'Ném' được chọn cho 'Common Language Runtime Exceptions' trong của hộp thoại Exceptions' (Ctrl + Alt + E) , các Khẳng định sẽ được ném ra.

    • Nếu không được kiểm soát, các Khẳng định sẽ được ném ra.

  • Với tính năng 'Kích hoạt tính năng chỉ mã của tôi' không được chọn.

    • Nếu 'Đã ném' được chọn, Xác nhận sẽ không được ném.

    • Nếu bỏ chọn 'Đã bỏ qua', Xác nhận sẽ được ném.

Do đó, Khẳng định sẽ không được ném khi 'Enable Just My Mã' được kiểm soát và 'Ném' được chọn cho 'Common Language Runtime Exceptions'.

+1

Hành vi tương tự đã xảy ra với chúng tôi trong VS 2013, nhưng ngay cả khi đã bật "Enable Just My Code". –

+0

Tôi có thể tìm thấy thông báo "Đã phát" này trong hộp thoại Ngoại lệ? Tôi thấy không có mục nhập như vậy ở đó? Tên đầy đủ của ngoại lệ chúng ta cần bỏ chọn là gì? –

0

Những câu trả lời đưa ra ở đây không giúp đỡ, nhưng tôi phát hiện ra rằng đó là đơn giản như kiểm tra "Define DEBUG liên tục" tùy chọn cho cấu hình gỡ lỗi trong cài đặt xây dựng của dự án:

The Define DEBUG constant option in project's build settings

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