2010-07-07 33 views
7

Gần đây tôi đã di chuyển rất nhiều thử nghiệm điều kiện tiên quyết thủ công và ngoại lệ với các hợp đồng mã. Thay vì nâng cấp lên .NET 4, tôi đã sử dụng assembly Microsoft.Contracts.dll để có thể gắn bó với .NET 3.5 lâu hơn một chút (đây là thư viện được cả .NET 3.5 và .NET 4 sử dụng). Tôi đã thiết lập các hợp đồng viết lại trong Visual Studio 2010 và các hợp đồng làm việc tốt.Các hợp đồng mã cho .NET 3.5 gây rối lên trình gỡ lỗi VS10

Tuy nhiên, vì tôi đã thực hiện chuyển đổi đó, tôi đã nhận thấy rằng trình gỡ lỗi hoạt động hài hước trong các phương thức có hợp đồng, đặc biệt là trong các lớp có một ContractInvariantMethod. Con trỏ thực hiện dường như không khớp với dòng được đánh dấu, một số điểm ngắt không được nhấn và tôi đã có phương thức mà trình gỡ lỗi không thể nói tên biến cục bộ và hiển thị các công cụ như CS$1$0000. Đây là bản sửa lỗi.

Có các vấn đề đã biết về việc sử dụng các hợp đồng mã trong Microsoft.Contracts.dll trong .NET 3.5 đến VS10 không? Các vấn đề tương tự có xảy ra với các hợp đồng mã trong .NET 4 không?

[Chỉnh sửa] Câu hỏi này dẫn tôi để tạo ra một lỗi trên Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in-iterator-methods-while-debugging

+0

[OT] Tên người dùng tuyệt vời :) – roundcrisis

Trả lời

1

Tôi hy vọng bạn biết viết lại hợp đồng nghĩa là gì — mã bổ sung được tạo khi không có bất kỳ mã nguồn nào cho trình biên dịch chốt lại. Với CLR có rất nhiều yếu tố khác nhau, có một số thứ mà trình gỡ rối sẽ không làm gì cả hoặc sẽ bị lẫn lộn và chỉ những thứ có đầy đủ các tính năng ngôn ngữ bị thổi với tác động rộng để có ngân sách hỗ trợ trình gỡ rối hoàn chỉnh. Ví dụ như các biểu thức lambda.

Không nên nói rằng việc gửi lỗi không phải vì lý do chính đáng, chỉ là bạn không nên mong đợi bất cứ điều gì để trở nên tốt hơn khi bạn đang sử dụng một khía cạnh chưa được phát triển đầy đủ. Được chấp nhận sớm luôn có loại chi phí đó, nhưng cũng có quyền khoe khoang :-)

+0

Vâng tôi biết rằng các công cụ bên ngoài phải chơi với IL và di chuyển các công cụ xung quanh. Kể từ khi đặt câu hỏi này, tôi đã chuyển sang .NET 4 và không bị làm phiền với vấn đề này nữa. Tôi đoán các công cụ hợp đồng mã cho .NET 3.5 là không đầy đủ về vấn đề đó. – Trillian

0

có trong tâm trí, rằng các hợp đồng đang hiện không làm việc với bài điều kiện & đa luồng. giới hạn các hợp đồng chỉ thực hiện việc viết lại Điều kiện tiên quyết. giải quyết được nhiều vấn đề trong hệ thống của chúng tôi.

+0

Thực ra trong trường hợp của tôi, chỉ cần bật viết lại hợp đồng, ngay cả khi viết lại được đặt thành không, sẽ gây ra vấn đề. Vì vậy, postconditions không phải là vấn đề, và tôi không làm bất kỳ đa luồng nào. – Trillian

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