Sdílet prostřednictvím


contextSwitchDeadlock – pomocník spravovaného ladění (MDA)

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Pomocník contextSwitchDeadlock spravovaného ladění (MDA) se aktivuje, když se během pokusu o přechod kontextu modelu COM zjistí zablokování.

Příznaky

Nejběžnějším příznakem je, že volání nespravované komponenty MODELU COM ze spravovaného kódu nevrací. Dalším příznakem je zvýšení využití paměti v průběhu času.

Příčina

Nejpravděpodobnější příčinou je, že jednovláknový byt (STA) vlákno není pumpovat zprávy. Vlákno STA buď čeká bez pumpování zpráv, nebo provádí zdlouhavé operace a neumožňuje pumpování fronty zpráv.

Zvýšení využití paměti v průběhu času je způsobeno finalizačním vláknem, které se pokouší volat Release nespravovanou komponentu COM a tato komponenta se nevrací. Tím zabráníte finalizačnímu objektu uvolnit další objekty.

Ve výchozím nastavení je model vláken pro hlavní vlákno konzolových aplikací jazyka Visual Basic STA. Tato funkce MDA se aktivuje, pokud vlákno STA používá interoperabilitu modelu COM přímo nebo nepřímo prostřednictvím modulu CLR (Common Language Runtime) nebo ovládacího prvku třetí strany. Chcete-li se vyhnout aktivaci tohoto MDA v konzolové aplikaci jazyka Visual Basic, použijte MTAThreadAttribute atribut na hlavní metodu nebo upravte aplikaci na pumpovací zprávy.

Pokud jsou splněny všechny následující podmínky, je možné, aby byla tato autorita MDA aktivována nepravdě:

  • Aplikace vytváří komponenty modelu COM z vláken STA přímo nebo nepřímo prostřednictvím knihoven.

  • Aplikace byla zastavena v ladicím programu a uživatel buď pokračoval v aplikaci, nebo provedl operaci kroku.

  • Nespravované ladění není povolené.

Pokud chcete zjistit, jestli se MDA nepravdě aktivuje, zakažte všechny zarážky, restartujte aplikaci a povolte její spuštění bez zastavení. Pokud mdA není aktivované, je pravděpodobné, že počáteční aktivace byla false. V takovém případě zakažte MDA, aby nedošlo k rušení relace ladění.

Poznámka:

Tato sada MDA je ve výchozím nastavení pro Visual Studio. Informace o tom, jak zakázat pomocníky spravovaného ladění, naleznete v tématu Diagnostika chyb pomocí Pomocníků pro spravované ladění.

Rozlišení

Postupujte podle pravidel MODELU COM týkajících se pumpování zpráv STA.

Vliv na modul runtime

Tento mdA nemá žádný vliv na CLR. Hlásí pouze data o kontextech modelu COM.

Výstup

Zpráva popisující aktuální kontext a cílový kontext

Konfigurace

<mdaConfig>
  <assistants>
    <contextSwitchDeadlock />
  </assistants>
</mdaConfig>

Viz také