Gdy biblioteka zewnętrzna zawiera dostawcę LINQ i zgłasza wyjątek podczas wykonywania drzewa wyrażeń dynamicznych, w jaki sposób mogę przerwać wykonywanie wyrażenia?Jak mogę debugować lub ustawić instrukcję break w skompilowanym drzewie wyrażeń?
Na przykład, używam trzeciego dostawcę partia LINQ2CRM, która pozwala mi nazwać metodę IQueryable
Max<TSource, TResult>()
, ale kiedy rzuca InvalidCastException
, nie udało mi się przełamać na miejscu, gdy jest wyjątek, utrudniając przejrzyj śledzenie stosu, ponieważ jest już rozwijane, gdy debugger zepsuje go w moim kodzie. Ustawiłem "break on throw" dla wspomnianego wyjątku. Moje ustawienia debugowania są:
Wyjaśnienie gdzie dokładnie chciałbym złamać. I Do not chcę, aby złamać w boku Wyrażenie LINQ, ale zamiast tego chcę złamać, gdy drzewo wyrażenie jest wykonywane, lub, innymi słowy, kiedy IQueryable
metoda rozszerzenia wywołuje zastąpienie dostarczone przez dostawcę LINQ. Wierzchołek stacktrace wygląda to, co jest gdzie chciałbym złamać wewnątrz (lub krok po kroku, lub cokolwiek):
at XrmLinq.QueryProviderBase.Execute[T](Expression expression)
at System.Linq.Queryable.Max[TSource,TResult](IQueryable`1 source, Expression`1 selector)
Czy to znaczy trzymać przerwania w ramach wyrażenia lambda w jednej z tych metod? –
Nie jestem pewien, czy [to pomaga] (http://www.simple-talk.com/dotnet/.net-framework/linq-secrets-revealed-chaining-and-debugging/), ale teraz szukam ponieważ jest to interesujące. Wszystkie drogi wydają się iść do LinqPada. Nie widzę sposobu, w jaki mógłbyś go złamać bez kodu źródłowego, a kiedy masz źródło, czy nie możesz po prostu złamać punktu w części dostawcy odpowiedzialnego za 'Max'? –
Sekcja MSDN (Wyrażenie drzewa) (http://msdn.microsoft.com/en-us/library/bb397951.aspx) zawiera sekcję [Debugowanie wyrażeń drzewa] (http://msdn.microsoft.com/ en-us/library/ee725345). Myślę, że właśnie tu muszę przestać szukać i wracać do pracy ;-) –