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: proces docelowy zakończył się z kodem "code" podczas oceniania funkcji "function".
Aby ułatwić inspekcję stanu obiektów platformy .NET, debuger automatycznie wymusza, aby debugowany proces uruchamiał inny kod (zazwyczaj metody accessorów właściwości i funkcje ToString). W większości scenariuszy te funkcje zakończą się pomyślnie lub zgłaszają wyjątki, które mogą zostać przechwycone przez debuger. Istnieją jednak pewne okoliczności, w których nie można przechwycić wyjątków, ponieważ przekraczają granice systemowe, wymagają przetwarzania komunikatów użytkownika lub są nieodwracalne. W związku z tym akcesor właściwości lub metoda ToString, która wykonuje kod, jawnie kończący proces (na przykład wywołań ExitProcess()) lub zgłaszający nieobsługiwany wyjątek, którego nie można przechwycić (na przykład StackOverflowException), kończy debugowany proces i przerywa sesję debugowania. Jeśli wystąpi ten komunikat o błędzie, doszło do problemu.
Jedną z typowych przyczyn tego problemu jest to, że gdy debuger przetwarza właściwość, która wywołuje samą siebie, może to spowodować błąd przepełnienia stosu. Nie da się odzyskać wyjątku przepełnienia stosu, a proces docelowy zostaje zakończony.
Aby naprawić ten błąd
Istnieją dwa możliwe rozwiązania tego problemu.
Rozwiązanie nr 1: uniemożliwia debugerowi wywoływanie właściwości getter lub metody ToString
Komunikat o błędzie wyświetla nazwę funkcji, którą debuger próbował wywołać. Przy użyciu nazwy funkcji możesz spróbować ponownie ocenić tę funkcję z okna Natychmiastowe , aby debugować ocenę. Debugowanie jest możliwe podczas oceniania z Okna Immediate, ponieważ w przeciwieństwie do niejawnych ocen z okien Autos/Locals/Watch debuger zatrzymuje się na nieobsługiwanych wyjątkach.
Jeśli możesz zmodyfikować tę funkcję, możesz uniemożliwić debugerowi wywoływanie gettera właściwości lub ToString metody. Spróbuj wykonać jedną z następujących czynności:
Zmień metodę na inny typ kodu oprócz metody getter właściwości lub Metody ToString, a problem zostanie rozwiązany.
— lub —
(Dla
ToString) ZdefiniujDebuggerDisplayatrybut typu, a debuger może ocenić 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ą.
Jeśli nie możesz zmodyfikować tej metody, możesz przerwać proces docelowy w innej instrukcji i ponowić próbę oceny.
Rozwiązanie nr 2: Wyłącz wszystkie niejawne oceny
Jeśli poprzednie rozwiązania nie rozwiążą problemu, możesz wyłączyć funkcję Włącz ocenę właściwości .
Otwórz okienko Opcje narzędzi> i rozwiń sekcję Wszystkie ustawienia>>. Wyczyść pole wyboru Włącz ocenę właściwości i inne niejawne wywołania funkcji .
Otwórz okno dialogowe Opcje narzędzi> i rozwiń sekcję Debugowanie>. Wyczyść pole wyboru Włącz ocenę właściwości i inne niejawne wywołania funkcji .
Ta zmiana wyłącza większość niejawnych ocen funkcji i powinna rozwiązać ten problem.