Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om du försöker felsöka kod är det enklare när koden INTE är optimerad. När koden är optimerad gör kompilatorn och körningen ändringar i den genererade CPU-koden så att den körs snabbare, men har en mindre direkt mappning till den ursprungliga källkoden. Om mappningen är mindre direkt kan felsökare ofta inte berätta värdet för lokala variabler, och kodsteg och brytpunkter kanske inte fungerar som förväntat.
Anmärkning
Mer information om JIT-felsökning (just-In-Time) finns i Felsöka med hjälp av felsökningsprogrammet Just-In-Time i Visual Studio.
Så här fungerar optimeringar i .NET
Normalt skapar versionskonfigurationen optimerad kod och konfigurationen för felsökningsversionen gör det inte. Egenskapen Optimize MSBuild styr om kompilatorn uppmanas att optimera kod.
I .NET-ekosystemet omvandlas koden från källa till CPU-instruktioner i en tvåstegsprocess: först konverterar C#-kompilatorn texten du skriver till ett mellanliggande binärt formulär som heter MSIL och skriver ut MSIL till .dll filer. Senare konverterar .NET Runtime denna MSIL till CPU-instruktioner. Båda stegen kan optimeras i viss utsträckning, men det andra steget som utförs av .NET Runtime utför de mer betydande optimeringarna.
Alternativet "Utelämna JIT-optimering vid modulbelastning (endast hanterad)"
Felsökningsprogrammet erbjuder ett alternativ som styr vad som händer när en DLL-fil som har kompilerats med aktiverade optimeringar laddas in i målprocessen. Om det här alternativet är avmarkerat (standardtillståndet) blir optimeringarna aktiverade när .NET Runtime kompilerar MSIL-koden till CPU-kod. Om alternativet är markerat begär felsökningsprogrammet att optimeringar inaktiveras.
Du kan konfigurera alternativet Ignorera JIT-optimering vid modulinläsning (endast hanterad) i fönstret Verktygsalternativ> i avsnittet Alla inställningar>>:
Du kan konfigurera alternativet Ignorera JIT-optimering vid modulinläsning (endast hanterad) i dialogrutan Verktygsalternativ> i avsnittet Allmän>:
När ska du kontrollera alternativet "Ignorera JIT-optimering"?
Kontrollera det här alternativet när du laddade ned DLL:er från en annan källa, till exempel ett NuGet-paket, och du vill felsöka koden i den här DLL-filen. För att undertryckning ska fungera måste du också hitta symbolfilen (.pdb) för den här DLL-filen.
Om du bara är intresserad av att felsöka koden som du skapar lokalt är det bäst att låta det här alternativet vara avmarkerat, eftersom det i vissa fall går långsammare att felsöka det här alternativet. Det finns två orsaker till avmattningen:
- Optimerad kod körs snabbare. Om du inaktiverar optimeringar för mycket kod kan prestanda påverkas betydligt.
- Om du har Just My Code aktiverat försöker felsökaren inte ens läsa in symboler för DLL:er som är optimerade. Det kan ta lång tid att hitta symboler.
Begränsningar för alternativet "Ignorera JIT-optimering"
Det finns två scenarier där aktivering av det här alternativet INTE fungerar:
- Om du kopplar felsökningsprogrammet till en process som redan körs har det här alternativet ingen effekt på moduler som redan lästs in när felsökningsprogrammet är kopplat.
Det här alternativet påverkar inte förkompilerade DLL:er (eller ngen'ed) till intern kod. Du kan dock inaktivera användningen av förkompilerad kod genom att starta processen med miljövariabeln "COMPlus_ReadyToRun" inställd på "0". Den här metoden instruerar .NET Core-körningen att inaktivera användningen av förkompilerade avbildningar, vilket tvingar körningen att JIT kompilera ramverkskod.
Om du riktar in dig på .NET Framework lägger du till miljövariabeln "COMPlus_ZapDisable" och ställer in den på "1".
Ange "COMPlus_ReadyToRun": "0" genom att lägga till den i varje profil i filen Egenskaper\launchSettings.js:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59694/",
"sslPort": 44320
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"COMPlus_ReadyToRun": "0"
}
},
"HttpLoggingSample": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"COMPlus_ReadyToRun": "0"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}