Sto scrivendo test di unità per un'app Web MVC e ho ricevuto eccezioni di riferimento null perché gli oggetti di test mocked-up sono solo parzialmente inizializzati. So che la linea sta gettando le eccezioni, e sembra qualcosa di simile:Visual Studio può dirmi quale riferimento ha generato una NullReferenceException?
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) &&
//...
Ci sono un sacco di riferimenti in là, e nessuno di loro potrebbe essere il problema. Tuttavia, lo stesso NullReferenceException
non sembra catturare quale riferimento si è verificato. Il fatto che sto passando una lambda presenta un'altra sfida: per quanto posso dire, non posso passare attraverso il lambda durante il debug e vedere quali membri di r
sono nulli.
C'è un modo che io possa fare una o entrambe le seguenti operazioni:
- dispone di Visual Studio dirmi esattamente che ha gettato il riferimento
NullReferenceException
? - In mancanza di questo, c'è un modo per fare il passo debugger attraverso l'espressione lambda (o semplicemente il mouse sopra le cose per vedere i loro valori) come è in corso di valutazione da parte
Any
?
Mi sento come se ci fosse un modo per fare queste cose, ma non riesco a trovarlo. Sono su VS2010 Premium, e ho Resharper, VS Power Tools e un paio di altre estensioni installate. Se c'è un componente aggiuntivo che fa questo, ci starei bene.
Edit:
Come Eric Lippert sottolinea, è impossibile individuare l'origine dei un'eccezione NR quando il codice è stato compilato in configurazione di rilascio. Sto solo chiedendo di lavorare in modalità di debug. Se Visual Studio (o qualche estensione di VS) è in grado di tracciare l'origine di un riferimento durante il debug, ciò risponderebbe alla mia domanda.
Edit 2:
La seconda domanda - come rompere e passo attraverso una lambda - è stato risposto, ma mi piace ancora di sapere se c'è un modo automatico per rintracciare un riferimento null.
No, non c'è modo di farlo, tranne che ReSharper può aiutare. –
Hai provato a cambiare il lambda in una funzione anonima e inserire il punto di interruzione al suo interno? – kol
Abilita la gestione delle eccezioni della prima possibilità (Debug => Eccezioni) e si interrompe quando viene lanciata NullReferenceException? –