Dela via


Felsöka med hjälp av felsökningsprogrammet Just-In-Time i Visual Studio

Just -In-Time felsökning kan automatiskt starta Visual Studio när en app som körs utanför Visual Studio får ett felmeddelande eller kraschar. Med Just-In-Time felsökning kan du testa appar utanför Visual Studio och öppna Visual Studio för att börja felsöka när ett problem uppstår.

Just-In-Time felsökning fungerar för Windows-skrivbordsappar. Det fungerar inte för Universella Windows-appar eller för hanterad kod som finns i ett inbyggt program, till exempel Visualiserare.

Tips

Om du bara vill förhindra att dialogrutan Just-In-Time Felsökning visas, men inte har Visual Studio installerat, kan du läsa Inaktivera felsökningsprogrammet Just-In-Time. Om du en gång hade Visual Studio installerat kan du behöva inaktivera Just-In-Time felsökning från Windows-registret.

Aktivera eller inaktivera Just-In-Time felsökning i Visual Studio

Du kan konfigurera just-In-Time felsökning från dialogrutan Alternativi Visual Studio Tools> (eller Felsökning>Alternativ).

Anteckning

Om du vill aktivera eller inaktivera Just-In-Time felsökning måste du köra Visual Studio som administratör. Aktivering eller inaktivering av Just-In-Time felsökning anger en registernyckel, och administratörsbehörigheter kan krävas för att ändra den nyckeln. Om du vill öppna Visual Studio som administratör högerklickar du på Visual Studio-appen och väljer Kör som administratör.

Så här aktiverar eller inaktiverar du felsökning av justIn-Time:

  1. På menyn Verktyg eller Felsökning väljer du Alternativ>Felsökning>Just-In-Time.

    Aktivera eller inaktivera JIT-felsökning

    Anteckning

    Om menyalternativet Just-In-Time inte visas kontrollerar du att felsökningsprogrammet Just-In-Time är installerat med Visual Studio Installer.

  2. I rutan Aktivera just-in-time-In-Time felsökning för dessa typer av kod väljer du vilka typer av kod du vill att just-in-time-In-Time-felsökning ska felsöka: Managed, Nativeoch/eller Script.

  3. Välj OK.

Om du aktiverar felsökningsprogrammet Just-In-Time, men det inte öppnas när en app kraschar eller fel uppstår, kan du läsa Felsöka Just-In-Time felsökning.

Inaktivera just-In-Time felsökning från Windows-registret

Just-In-Time felsökning kan fortfarande vara aktiverad även om Visual Studio inte längre är installerat på datorn. Om Visual Studio inte längre är installerat kan du inaktivera Just-In-Time felsökning genom att redigera Windows-registret.

Så här inaktiverar du felsökning av justIn-Time genom att redigera registret:

  1. Kör Registry Editor (regedit.exe) från menyn Start i Windows ).

  2. I fönstret Registereditorn letar du upp och tar bort följande registerposter om de finns:

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

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

    JIT-registernyckel

  3. Ta också bort följande registerposter om de finns:

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

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    Se till att inte ta bort eller ändra andra registernycklar.

  4. Stäng Registereditorns fönster.

Aktivera just-In-Time felsökning av ett Windows-formulär

Som standard har Windows Form-appar en undantagshanterare på toppnivå som gör att appen kan fortsätta köras om den kan återställas. Om en Windows Forms-app utlöser ett ohanterat undantag visas följande dialogruta:

Ohanterat undantag i Windows-formulär

Om du vill aktivera Just-In-Time felsökning i stället för standardhantering av Windows-formulärfel lägger du till följande inställningar:

  • I avsnittet system.windows.forms i filen machine.config eller <appnamn>.exe.config anger du värdet jitDebugging till true:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • I ett C++ Windows-formulärprogram anger du även DebuggableAttribute till true i en .config fil eller i koden. Om du kompilerar med /Zi och utan /Oganger kompilatorn det här attributet åt dig. Om du vill felsöka en icke-optimerad versionsversion måste du dock ange DebuggableAttribute genom att lägga till följande rad i appens AssemblyInfo.cpp-fil:

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

    Mer information finns i DebuggableAttribute.

Använd just-In-Time felsökning

Det här exemplet vägleder dig genom Just-In-Time felsökning när en app genererar ett fel.

  • Du måste ha Visual Studio installerat för att kunna följa dessa steg. Om du inte har Visual Studio kan du ladda ned den kostnadsfria Visual Studio Community Edition.

  • Kontrollera att Just-In-Time felsökning är aktiverat i Verktyg>Alternativ>Felsökning>Just-In-Time.

I det här exemplet skapar du en C#-konsolapp i Visual Studio som genererar en NullReferenceException-.

  1. Skapa en C#-konsolapp i Visual Studio (File>New>Project>Visual C#>Console Application) med namnet ThrowsNullException. Mer information om hur du skapar projekt i Visual Studio finns i Genomgång: Skapa ett enkelt program.

  2. När projektet öppnas i Visual Studio öppnar du filen Program.cs. Ersätt metoden Main() med följande kod, som skriver ut en rad till konsolen och sedan genererar en 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. Om du vill skapa lösningen väljer du antingen konfigurationen Debug (standard) eller Version och väljer sedan Build>Rebuild Solution.

    Anteckning

    • Välj Felsökning konfiguration för en fullständig felsökningsupplevelse.
    • Om du väljer Version konfiguration måste du inaktivera Just My Code- för att den här proceduren ska fungera. Under Verktyg>Alternativ>Felsökningavmarkerar du Aktivera bara min kod.

    Mer information om byggkonfigurationer finns i Understanding build configurations.

  4. Öppna den skapade appen ThrowsNullException.exe i C#-projektmappen (...\ThrowsNullException\ThrowsNullException\bin\Debug eller ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Du bör se följande kommandofönster:

    Skärmbild av konsolen för ThrowsNullException.exe, som genererar ett ohanterat null-referensundantag (System.NullReferenceException).

  5. Dialogrutan Välj bara-In-Time Debugger öppnas.

    Skärmbild av dialogrutan Välj just-In-Time felsökningsprogram, som visas efter att undantaget visas i ThrowsNullException.exe konsolfönstret.

    Under Tillgängliga felsökningsprogramväljer du Ny instans av <önskad Visual Studio-version/utgåva>, om den inte redan har valts.

  6. Välj OK.

    Projektet ThrowsNullException öppnas i en ny instans av Visual Studio, med körningen avbruten vid raden som utlöste undantaget.

    Skärmbild av projektet ThrowsNullException i Visual Studio, med markering av den källkodsrad som utlöste undantaget.

Du kan börja felsöka nu. Om du felsöker en riktig app måste du ta reda på varför koden utlöser undantaget.

Försiktighet

Om din app innehåller kod som inte är betrodd visas en dialogruta för säkerhetsvarning så att du kan bestämma om du vill fortsätta med felsökningen. Innan du fortsätter felsökningen bestämmer du om du litar på koden. Skrev du koden själv? Känner du igen namnet på processen om programmet körs på en fjärrdator? Om appen körs lokalt bör du överväga möjligheten att skadlig kod körs på datorn. Om du bestämmer dig för att koden är tillförlitlig väljer du OK. Annars väljer du Avbryt.

Felsöka just-In-Time-debuggning

Om Just-In-Time felsökning inte startar när en app kraschar, även om den är aktiverad i Visual Studio:

  • Ett känt Windows-problem kan orsaka att felsökaren Just-In-Time misslyckas.

    Korrigeringen är att lägga till ett DWORD-värde av Automed värdedata1till följande registernycklar:

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

    • (För 32-bitarsappar på 64-bitarsdatorer) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Windows Felrapportering kan ta över felhanteringen på datorn.

    Åtgärda problemet genom att använda Registereditorn för att lägga till ett DWORD-värde av Inaktiverad, med värdedata av 1, till följande registernycklar:

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

    • (För 32-bitarsappar på 64-bitarsdatorer) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    Mer information finns i . WER-inställningar.

Du kan se följande felmeddelanden under just-In-Time felsökning:

  • Det går inte att ansluta till kraschprocessen. Det angivna programmet är inte ett Windows- eller MS-DOS-program.

    Felsökningsprogrammet försökte ansluta till en process som körs under en annan användare.

    I Visual Studio kan du lösa det här problemet genom att öppna Debug>Attach to Process (eller trycka på Ctrl + Alt + P) och hitta den process som du vill felsöka i listan tillgängliga processer. Om du inte känner till namnet på processen hittar du process-ID:t i dialogrutan Visual Studio Just-In-Time Felsökningsprogram. Välj processen i listan tillgängliga processer och välj Bifoga. Välj Nej för att stänga Just-In-Time felsökningsprogrammets dialogruta.

  • Det gick inte att starta felsökningsprogrammet eftersom ingen användare är inloggad.

    Ingen användare har loggat in på konsolen, så det finns ingen användarsession för att visa dialogrutan Just-In-Time felsökning.

    Du kan åtgärda problemet genom att logga in på datorn.

  • klass inte registrerad.

    Felsökningsprogrammet försökte skapa en COM-klass som inte är registrerad, förmodligen på grund av ett installationsproblem.

    Åtgärda problemet genom att använda Installationsprogrammet för Visual Studio för att installera om eller reparera Visual Studio-installationen.