Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Celý text zprávy: Vyhodnocení funkce "function" vypršel časový limit a bylo nutné ji přerušit nebezpečným způsobem. Mohlo dojít k poškození cílového procesu.
Aby bylo snazší zkontrolovat stav objektů .NET, ladicí program automaticky vynutí laděný proces spuštění dalšího kódu (obvykle metod getter vlastností a toString funkcí). Ve většině scénářů se tyto funkce rychle dokončí a zjednoduší ladění. Ladicí program ale aplikaci nespustí v sandboxu. V důsledku toho může metoda getter nebo ToString, která volá do nativní funkce, která přestane reagovat, vést k dlouhým časovým limitům, které nemusí být obnovitelné. Pokud narazíte na tuto chybovou zprávu, došlo k této chybě.
Jedním z běžných důvodů tohoto problému je, že když ladicí program vyhodnotí vlastnost, umožňuje pouze vlákno, které je kontrolováno ke spuštění. Takže pokud vlastnost čeká na spuštění v jiných vláknech uvnitř laděné aplikace a pokud čeká způsobem, že modul runtime .NET nemůže přerušit, dojde k tomuto problému.
Oprava této chyby
V následujících částech najdete několik možných řešení tohoto problému.
Řešení č. 1: Zabránění volání vlastnosti getter nebo metody ToString ladicího programu
Chybová zpráva vám řekne název funkce, kterou se ladicí program pokusil volat. Pokud můžete tuto funkci upravit, můžete zabránit ladicímu programu v volání vlastnosti getter nebo ToString metoda. Vyzkoušejte jednu z následujících možností:
Změňte metodu na jiný typ kódu kromě vlastnosti getter nebo ToString metoda a problém zmizí.
nebo
(For ToString) Definujte atribut DebuggerDisplay pro typ a ladicí program může vyhodnotit něco jiného než ToString.
nebo
(Pro getter vlastnosti) Do vlastnosti vložte atribut System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never ). To může být užitečné, pokud máte metodu, která potřebuje zůstat vlastností z důvodů kompatibility rozhraní API, ale měla by to být metoda.
Řešení č. 2: Požádejte ladicí program o přerušení vyhodnocení.
Chybová zpráva vám řekne název funkce, kterou se ladicí program pokusil volat. Pokud vlastnost getter nebo ToString metoda někdy selže správně, zejména v situacích, kdy problém je, že kód potřebuje jiné vlákno ke spuštění kódu, pak implementační funkce může volat System.Diagnostics.Debugger.NotifyOfCrossThreadDependency požádat ladicí program o přerušení vyhodnocení funkce. S tímto řešením je stále možné explicitně vyhodnotit tyto funkce, ale výchozí chování je, že spuštění se zastaví, když dojde k volání NotifyOfCrossThreadDependency.
Řešení č. 3: Zakázání veškerého implicitního vyhodnocení
Pokud předchozí řešení problém nevyřeší, přejděte na Možnosti nástrojů>a zrušte zaškrtnutí nastavení Ladění>obecné>povolení vyhodnocení vlastností a dalších implicitních volání funkcí. Tím se zakáže většina implicitních vyhodnocení funkcí a problém by se měl vyřešit.
Řešení č. 4: Kontrola kompatibility s vývojářskými nástroji třetích stran
Pokud používáte funkci Resharper, podívejte se na tento problém s návrhy.
Řešení č. 5: Povolení režimu spravované kompatibility
Pokud přepnete na starší ladicí modul, můžete tuto chybu odstranit. Přejděte na Možnosti nástrojů>a vyberte nastavení Ladění>režimu obecné>kompatibility. Další informace naleznete v tématu Obecné možnosti ladění.