Tôi đang viết các bài kiểm tra đơn vị cho một ứng dụng web MVC, và tôi đã nhận được các ngoại lệ tham chiếu null vì các đối tượng thử nghiệm giả lập chỉ được khởi tạo một phần. Tôi biết dòng nào đang ném ngoại lệ và trông giống như thế này:Visual Studio có thể cho tôi biết tham chiếu nào đã ném NullReferenceException không?
return Supervisor.RegistrationInformation.Registrations
.Any(r =>
r.RegistrationCountry.IsUSAOrCandada() &&
(!DatesWorked.Start.HasValue || r.RegistrationDate <= DatesWorked.Start.Value) &&
(!DatesWorked.End.HasValue || r.RegistrationExpirationDate >= DatesWorked.End.Value) &&
//...
Có rất nhiều tham chiếu trong đó và bất kỳ vấn đề nào trong số đó có thể là vấn đề. Tuy nhiên, NullReferenceException
chính nó dường như không nắm bắt tham chiếu nào bị nổ. Thực tế là tôi đi qua một lambda trình bày một thách thức khác: Theo như tôi có thể nói, tôi không thể bước qua lambda trong khi gỡ lỗi và xem những thành viên của r
là null.
Có cách nào tôi có thể làm một hoặc cả hai trong những cách sau:
- Có Visual Studio cho tôi biết chính xác những tài liệu tham khảo ném
NullReferenceException
? - Nếu không, có cách nào để làm cho trình gỡ lỗi bước qua biểu thức lambda (hoặc chỉ di chuột qua mọi thứ để xem giá trị của chúng) vì nó đang được đánh giá bởi
Any
?
Tôi cảm thấy phải có cách để làm những việc này, nhưng tôi dường như không thể tìm thấy nó. Tôi đang ở trên VS2010 Premium, và tôi có Resharper, VS Power Tools, và một vài phần mở rộng khác được cài đặt. Nếu có một add-on thực hiện điều này, tôi sẽ ổn với điều đó.
Edit:
Như Eric Lippert chỉ ra, nó không thể xác định được nguồn gốc của một ngoại lệ NR khi mã đã được biên soạn trong cấu hình phát hành. Tôi chỉ hỏi về làm việc trong chế độ gỡ lỗi. Nếu Visual Studio (hoặc một số mở rộng cho VS) có thể theo dõi nguồn của một tham chiếu trong khi gỡ lỗi, điều đó sẽ trả lời câu hỏi của tôi.
Sửa 2:
Câu hỏi thứ hai - làm thế nào để phá vỡ và bước qua một lambda - đã được trả lời, nhưng tôi vẫn muốn biết nếu có một cách tự động để theo dõi một tham chiếu null.
Không, không có cách nào để thực hiện việc này, ngoại trừ ReSharper có thể trợ giúp. –
Bạn đã thử thay đổi lambda thành một hàm ẩn danh và đặt điểm ngắt bên trong nó? – kol
Bật xử lý ngoại lệ cơ hội đầu tiên (Debug => Exceptions) và ngắt khi NullReferenceException được ném? –