2012-04-03 21 views
8

Khi Debug.Assert() cuộc gọi phương thức tồn tại trong mã nguồn và tôi biên dịch trong chế độ phát hành, trình biên dịch có tạo ra IL cho Debug.Assert() mặc dù nó không được gọi không?Debug.Assert có tạo ra IL ở chế độ phát hành không?

Một trong những nhà phát triển của chúng tôi đã thêm Assert gần đây để hiển thị thông tin về bảo mật nội bộ của chúng tôi. Ai đó có thể nhìn vào chế độ phát hành IL và tìm ra văn bản cho khẳng định?

+0

Check-out của tôi [cũ blog entry] (http (khi DEBUG không được định nghĩa.): //tjoe.wordpress .com/2007/12/03/cotw-conditionalattribute-class /), lưu ý rằng các phương thức 'Debug' được trang trí với' [Conditional ("DEBUG")] '. – CodeNaked

Trả lời

9

không theo mặc định, trừ khi bạn xác định các biểu tượng DEBUG (và theo mặc định, cho phát hành mà bị tắt).

Để xác minh, hãy mở Thuộc tính dự án của bạn và chọn ngăn Xây dựng trong Visual Studio. Nó sẽ hiển thị hộp kiểm "Xác định hằng số DEBUG". Nếu nó được bật cho Release, sau đó xác nhận sẽ kích hoạt; nếu không, họ sẽ không.

7

Không, các thành viên của lớp Debug (với thuộc tính ConditionalAttribute) không phát ra IL. Có no explicit mention on MSDN, tuy nhiên hai dấu ngoặc kép sau bao hàm hành vi khá tốt, vì vậy để tăng thêm Roy của câu trả lời:

Nếu bạn sử dụng phương thức trong lớp Debug để in thông tin gỡ lỗi và kiểm tra logic của bạn với khẳng định, bạn có thể làm mã của bạn nhiều hơn mạnh mẽ mà không ảnh hưởng đến hiệu suất và kích thước mã của sản phẩm vận chuyển của bạn.

Vì vậy, không có sự khác biệt kích thước ngụ ý không có đầu ra từ những gì, và

Thuộc tính ConditionalAttribute được áp dụng cho các phương pháp Debug. Trình biên dịch hỗ trợ ConditionalAttribute bỏ qua các cuộc gọi đến các phương thức trừ khi "DEBUG" được định nghĩa là biểu tượng biên dịch có điều kiện. Tham khảo tài liệu của trình biên dịch để xác định xem ConditionalAttribute có được hỗ trợ không và cú pháp để xác định biểu tượng biên dịch có điều kiện .

Điều đó có nghĩa rằng, ở cấp trình biên dịch, các cuộc gọi thậm chí sẽ không được xem xét

+0

MSDN hiển thị rõ ràng thuộc tính trên [tài liệu cấp phương thức] (http://msdn.microsoft.com/en-us/library/kssw4w7z.aspx). Nó không nói thuộc tính nào nhưng bạn luôn có thể tra cứu tài liệu trên chính thuộc tính đó. –

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