Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Pełny tekst wiadomości: Ewaluacja funkcji "function" przekroczyła limit czasu i musiała zostać przerwana w sposób niebezpieczny. Problem może spowodować uszkodzenie procesu docelowego.
Aby ułatwić inspekcję stanu obiektów platformy .NET, debuger automatycznie zmusza debugowany proces do uruchamiania innych fragmentów kodu (zwykle są to metody pobierające wartości właściwości oraz funkcje ToString). W większości wszystkich scenariuszy te funkcje są szybko kompletne i ułatwiają debugowanie. Jednak debuger nie uruchamia aplikacji w piaskownicy. W związku z tym metoda getter właściwości lub ToString, która wywołuje funkcję natywną, która przestaje odpowiadać, może prowadzić do długich limitów czasu, które mogą nie być możliwe do odzyskania. Jeśli wystąpi ten komunikat o błędzie, doszło do problemu.
Jedną z typowych przyczyn tego problemu jest to, że gdy debuger ocenia właściwość, zezwala na wykonywanie tylko wątku poddanego inspekcji. Dlatego jeśli właściwość czeka na uruchomienie innych wątków wewnątrz debugowanej aplikacji i oczekuje w sposób, którego środowisko uruchomieniowe .NET nie może przerwać, ten problem występuje.
Aby naprawić ten błąd
Zapoznaj się z poniższymi sekcjami, aby zapoznać się z kilkoma możliwymi rozwiązaniami tego problemu.
Rozwiązanie nr 1: uniemożliwia debugerowi wywoływanie właściwości getter lub metody ToString
Komunikat o błędzie informuje o nazwie funkcji, którą debuger próbował wywołać. Jeśli możesz zmodyfikować tę funkcję, możesz uniemożliwić debugerowi wywoływanie metody getter właściwości lub Metody ToString. Spróbuj wykonać jedną z następujących czynności:
Zmień metodę na inny rodzaj kodu niż metoda zwracająca właściwość lub metoda ToString, a problem zniknie.
— lub —
(W przypadku ToString) Zdefiniuj atrybut DebuggerDisplay dla typu, a debugger może przetworzyć coś innego niż ToString.
— lub —
(W przypadku gettera właściwości) Umieść atrybut System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never) na właściwości. Może to być przydatne, jeśli masz metodę, która musi pozostać właściwością ze względów zgodności interfejsu API, ale tak naprawdę powinna być metodą.
Rozwiązanie numer 2: Poproś debuger o przerwanie procesu ewaluacji na żądanie kodu docelowego
Komunikat o błędzie informuje o nazwie funkcji, którą debuger próbował wywołać. Jeśli metoda getter właściwości lub ToString czasami kończy się niepowodzeniem, zwłaszcza w sytuacjach, gdy problem polega na tym, że kod wymaga innego wątku do uruchomienia kodu, funkcja implementacji może wywołać metodę System.Diagnostics.Debugger.NotifyOfCrossThreadDependency , aby poprosić debugera o przerwanie oceny funkcji. Dzięki temu rozwiązaniu nadal można jawnie ocenić te funkcje, ale domyślne zachowanie polega na tym, że wykonanie zatrzymuje się po wywołaniu NotifyOfCrossThreadDependency.
Rozwiązanie nr 3: Wyłącz wszystkie niejawne oceny
Jeśli poprzednie rozwiązania nie rozwiążą problemu, możesz wyłączyć opcję Włącz ocenę właściwości i inne niejawne wywołania funkcji . Ta konfiguracja wyłącza większość niejawnych ocen funkcji i powinna rozwiązać ten problem.
W okienku Opcje narzędzi> rozwiń sekcję Wszystkie ustawienia>> i wyczyść pole wyboru Włącz ocenę właściwości i inne niejawne wywołania funkcji.
W oknie dialogowym Opcje narzędzi>rozwiń sekcjęOgólne debugowania> i wyczyść pole wyboru Włącz ocenę właściwości i inne niejawne wywołania funkcji.
Rozwiązanie nr 4: Sprawdzanie zgodności z narzędziami deweloperów innych firm
Jeśli używasz narzędzia Resharper, zobacz ten problem , aby uzyskać sugestie.