Sdílet prostřednictvím


Ladění pomocí ladicího programu Just-In-Time v sadě Visual Studio

Just-In-Time ladění může visual Studio spustit automaticky, když aplikace běží mimo chyby sady Visual Studio nebo dojde k chybovému ukončení. Pomocí just-In-Time ladění můžete otestovat aplikace mimo Visual Studio a otevřít Visual Studio, abyste mohli začít ladit, když dojde k problému.

Just-In-Time ladění funguje pro desktopové aplikace pro Windows. Nefunguje pro univerzální aplikace pro Windows ani pro spravovaný kód hostovaný v nativní aplikaci, jako jsou vizualizéry.

Spropitné

Pokud chcete jenom zastavit zobrazení dialogového okna Just-In-Time Debugger, ale nemáte nainstalovanou sadu Visual Studio, podívejte se na Jak zakázat Just-In-Time ladicí program. Pokud jste po instalaci sady Visual Studio museli zakázat ladění just-In-Time z registru Systému Windows.

Povolení nebo zakázání ladění Just-In-TimeIn-Time ve Visual Studio

Just-In-Time ladění můžete nakonfigurovat v dialogovém okně Nástroje Možnosti sady Visual Studio> (nebo Možnosti ladění >).

Poznámka

Pokud chcete povolit nebo zakázat ladění Just-In-Time, musíte spustit Visual Studio jako správce. Povolení nebo zakázání ladění Just-In-Time nastaví klíč registru a oprávnění správce možná budou nutná ke změně tohoto klíče. Pokud chcete visual Studio otevřít jako správce, klikněte pravým tlačítkem na aplikaci Visual Studio a zvolte Spustit jako správce.

Povolení nebo zakázání ladění just-In-Time:

  1. V nabídce Nástroje nebo Ladění vyberte Možnosti>Ladění>za běhu.

    Povolit nebo zakázat ladění JIT

    Poznámka

    Pokud se možnost nabídky Just-In-Time nezobrazí, ujistěte se, že je pomocí instalačního programu sady Visual Studio nainstalovaný ladicí program Just-In-Time.

  2. V poli Povolit just-in-timeIn-Time ladění pro tyto typy kódu vyberte typy kódu, které chcete ladit pomocí just-in-timeIn-Time ladění: spravované, nativnía/nebo skript.

  3. Vyberte OK.

Pokud povolíte ladicí program Just-In-Time, ale při selhání nebo chybách aplikace se neotevře, viz Řešení problémů sIn-Time laděním.

Zakažte just-In-Time ladění z registru Windows

Just-In-Time ladění může být stále povoleno, i když Visual Studio už není nainstalované na vašem počítači. Pokud už sada Visual Studio není nainstalovaná, můžete zakázat ladění just-In-Time úpravou registru Systému Windows.

Zakázat ladění just-In-Time úpravou registru:

  1. V nabídce Start Systému Windows spusťte editoru registru (regedit.exe).

  2. V okně editoru registru vyhledejte a odstraňte následující položky registru, pokud existují:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    klíč registru JIT

  3. Pokud existují, odstraňte také následující položky registru:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    Nezapomeňte odstranit ani změnit žádné jiné klíče registru.

  4. Zavřete okno editoru registru .

Povolení just-In-Time ladění formuláře Windows

Ve výchozím nastavení mají aplikace Windows Form obslužnou rutinu výjimek nejvyšší úrovně, která umožňuje aplikaci běžet, pokud se dá obnovit. Pokud aplikace Windows Forms vyvolá neošetřenou výjimku, zobrazí se následující dialogové okno:

neošetřená výjimka formuláře Windows Form

Pokud chcete povolit ladění just-In-Time místo standardního zpracování chyb formuláře Windows Form, přidejte tato nastavení:

  • V system.windows.forms části machine.config nebo <souboru>.exe.config aplikace nastavte hodnotu jitDebugging na true:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • V aplikaci C++ Windows Form také nastavte DebuggableAttribute na true v souboru .config nebo v kódu. Pokud kompilujete pomocí /Zi a bez /Og, kompilátor nastaví tento atribut za vás. Pokud ale chcete ladit neoptimalizované sestavení vydané verze, musíte nastavit DebuggableAttribute přidáním následujícího řádku do souboru AssemblyInfo.cpp vaší aplikace:

    [assembly:System::Diagnostics::DebuggableAttribute(true, true)];
    

    Další informace najdete v tématu DebuggableAttribute.

Použití ladění just-In-Time

Tento příklad vás provede laděním Just-In-Time, pokud aplikace vyvolá chybu.

  • Abyste mohli postupovat podle těchto kroků, musíte mít nainstalovanou sadu Visual Studio. Pokud nemáte Visual Studio, můžete si stáhnout bezplatnou Visual Studio Community Edition.

  • Ujistěte se, žeIn-Time ladění je povolené v Nástroje>Možnosti>Ladění>Just-In-Time.

V tomto příkladu vytvoříte konzolovou aplikaci jazyka C# v sadě Visual Studio, která vyvolá NullReferenceException.

  1. V sadě Visual Studio vytvořte konzolovou aplikaci jazyka C# (File>New>Project>Visual C#>Console Application) s názvem ThrowsNullException. Další informace o vytváření projektů v sadě Visual Studio naleznete v tématu Návod: Vytvoření jednoduché aplikace.

  2. Po otevření projektu v sadě Visual Studio otevřete soubor Program.cs. Nahraďte metodu Main() následujícím kódem, který vytiskne řádek do konzoly a pak vyvolá NullReferenceException:

    static void Main(string[] args)
    {
        Console.WriteLine("we will now throw a NullReferenceException");
        throw new NullReferenceException("this is the exception thrown by the console app");
    }
    
  3. Řešení sestavíte tak, že zvolíte buď konfiguraci Debug (výchozí), nebo Release, a pak vyberete Sestavit>Znovu sestavit řešení.

    Poznámka

    • Zvolte konfiguraci ladění pro plnohodnotný zážitek z ladění.
    • Pokud vyberete konfiguraci release, musíte vypnout just My Code, aby tento postup fungoval. V části Nástroje>Možnosti>Laděnízrušte zaškrtnutí Povolit pouze můj kód.

    Další informace o konfiguracích sestavení najdete v tématu Principy konfigurací sestavení.

  4. Otevřete sestavenou aplikaci ThrowsNullException.exe ve složce projektu C# (...\ThrowsNullException\ThrowsNullException\bin\Debug nebo ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Mělo by se zobrazit následující příkazové okno:

    snímek obrazovky konzoly pro ThrowsNullException.exe, která vyvolá nezpracovanou výjimku reference null (System.NullReferenceException).

  5. Otevře se dialogové okno Vybrat pouze-In-Time Debugger.

    snímek obrazovky s dialogovým oknem Zvolit just-In-Time Debugger, které se zobrazí po výjimce v okně konzoly ThrowsNullException.exe.

    V části Dostupné ladicí programyvyberte Nová instance <vaší preferované verze nebo edice Visual Studio>, pokud ještě není vybrána.

  6. Vyberte OK.

    Projekt ThrowsNullException se otevře v nové instanci sady Visual Studio s zastaveným spuštěním na řádku, který vyvolal výjimku:

    snímek obrazovky projektu ThrowsNullException v sadě Visual Studio se zvýrazněním řádku zdrojového kódu, který vyvolal výjimku.

Můžete začít ladit v tuto chvíli. Pokud ladíte skutečnou aplikaci, musíte zjistit, proč kód vyvolává výjimku.

Opatrnost

Pokud vaše aplikace obsahuje nedůvěryhodný kód, zobrazí se dialogové okno upozornění zabezpečení, které vám umožní rozhodnout se, jestli chcete pokračovat v ladění. Než budete pokračovat v ladění, rozhodněte se, jestli kódu důvěřujete. Napsali jste kód sami? Pokud aplikace běží na vzdáleném počítači, rozpoznáte název procesu? Pokud je aplikace spuštěná místně, zvažte možnost spuštění škodlivého kódu na vašem počítači. Pokud se rozhodnete, že kód je důvěryhodný, vyberte OK. V opačném případě vyberte Zrušit.

Řešení potíží s laděním Just-In-Time

Pokud just-In-Time ladění se nespustí, když dojde k chybovému ukončení aplikace, i když je povolené v sadě Visual Studio:

  • Známý problém s Windows může způsobovat selhání ladicího programu Just-In-Time.

    Opravou je přidání hodnoty DWORDautomatickéhos daty hodnot1, do následujících klíčů registru:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

    • (Pro 32bitové aplikace na 64bitových počítačích) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Zasílání zpráv o chybách systému Windows může převzít zpracování chyb ve vašem počítači.

    Pokud chcete tento problém vyřešit, použijte Editor registru k přidání DWORD hodnoty pro Disabled, s datovou hodnotou 1, do následujících klíčů registru:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

    • (Pro 32bitové aplikace na 64bitových počítačích) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    Další informace najdete v tématu nastavení WER.

Během ladění Just-In-Time se můžou zobrazit následující chybové zprávy.

  • Nelze se připojit k crashujícímu procesu. Zadaný program není program Windows ani program MS-DOS.

    Ladicí program se pokusil připojit k procesu spuštěném pod jiným uživatelem.

    Chcete-li tento problém vyřešit, otevřete v sadě Visual Studio Ladění>Připojit k procesu (nebo stiskněte Ctrl + Alt + P) a vyhledejte proces, který chcete ladit, v seznamu Dostupné procesy. Pokud neznáte název procesu, vyhledejte ID procesu v dialogovém okně Visual Studio Just-In-Time Debug ger. Vyberte postup v seznamu Dostupné procesy, potom zvolte Připojit. Výběrem možnosti Ne zavřete dialogové okno ladicího programu Just-In-Time.

  • Ladicí program nelze spustit, protože nebyl přihlášen žádný uživatel.

    Ke konzoli není přihlášený žádný uživatel, takže neexistuje žádná uživatelská relace pro zobrazení dialogového okna ladění Just-In-Time.

    Pokud chcete tento problém vyřešit, přihlaste se k počítači.

  • třída není zaregistrovaná.

    Ladicí program se pokusil vytvořit COM třídu, která není zaregistrovaná, pravděpodobně kvůli problému s instalací.

    Chcete-li tento problém vyřešit, pomocí instalačního programu sady Visual Studio přeinstalujte nebo opravte instalaci sady Visual Studio.