Quando una libreria esterna contiene un provider LINQ e genera un'eccezione durante l'esecuzione di un albero di espressioni dinamiche, come posso interrompere quando viene generata quell'espressione?Come posso eseguire il debug o impostare un'istruzione break all'interno di un albero di espressioni compilato?
Per esempio, io uso un terzo fornitore LINQ2CRM, che mi permette di chiamare il metodo di IQueryable
Max<TSource, TResult>()
, ma quando si lancia un InvalidCastException
, non riesco a rompere sul posto quando viene generata l'eccezione, rendendo difficile rivedere lo stack-trace perché è già svanito quando il debugger lo interrompe nel mio codice. Ho impostato "break on throw" per l'eccezione citata. Le mie impostazioni di debug sono:
Chiarimento su dove esattamente che vorrei rompere. I non si desidera interrompere l'espressione LINQ, ma, al contrario, voglio interrompere quando viene eseguito l'albero dell'espressione o, in altre parole, quando il metodo di estensione Max()
chiama l'override fornito dal provider LINQ. La parte superiore della stacktrace assomiglia a questo, che è dove vorrei spezzare all'interno (o scorrere, o qualsiasi altra cosa):
at XrmLinq.QueryProviderBase.Execute[T](Expression expression)
at System.Linq.Queryable.Max[TSource,TResult](IQueryable`1 source, Expression`1 selector)
Vuoi dire attaccare un punto di interruzione in parte di un'espressione lambda in uno di questi metodi? –
Non sono sicuro se [questo aiuti] (http://www.simple-talk.com/dotnet/.net-framework/linq-secrets-revealed-chaining-and-debugging/), ma sto facendo una ricerca ora come questo è interessante. Tutte le strade sembrano andare a LinqPad. Non riesco a vedere come potreste essere in grado di suddividerlo senza il codice sorgente, e poi quando avete il sorgente, non potete semplicemente interromperlo nella parte del provider responsabile di 'Max'? –
La sezione MSDN [Expression Trees] (http://msdn.microsoft.com/en-us/library/bb397951.aspx) ha anche una sezione per [Debugging Expression Trees] (http://msdn.microsoft.com/ it-it/library/ee725345). Penso che sia qui che devo smettere di cercare e tornare al lavoro ;-) –