Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Si vous essayez de déboguer du code, il est plus facile lorsque ce code n’est pas optimisé. Lorsque le code est optimisé, le compilateur et le runtime apportent des modifications au code processeur émis afin qu’il s’exécute plus rapidement, mais possède un mappage moins direct au code source d’origine. Si le mappage est moins direct, les débogueurs ne peuvent pas souvent vous indiquer la valeur des variables locales, et les points d'arrêt ou l'exécution pas à pas peuvent ne pas fonctionner comme prévu.
Remarque
Pour plus d’informations sur le débogage JIT (Juste-In-Time), consultez Déboguer à l’aide du débogueur Just-In-Time dans Visual Studio.
Fonctionnement des optimisations dans .NET
Normalement, la configuration de build Release crée du code optimisé et la configuration de build de débogage ne le fait pas. La Optimize propriété MSBuild contrôle si le compilateur est informé d’optimiser le code.
Dans l’écosystème .NET, le code est converti de source en instructions processeur dans un processus en deux étapes : tout d’abord, le compilateur C# convertit le texte que vous tapez en un formulaire binaire intermédiaire appelé MSIL et écrit msIL dans .dll fichiers. Plus tard, le runtime .NET convertit ce MSIL en instructions de processeur. Les deux étapes peuvent optimiser à un certain degré, mais la deuxième étape effectuée par le runtime .NET effectue les optimisations les plus significatives.
Option « Supprimer l’optimisation JIT sur le chargement de module (managé uniquement) »
Le débogueur expose une option qui contrôle ce qui se passe lorsqu’une DLL compilée avec des optimisations activées est chargée à l’intérieur du processus cible. Si cette option n’est pas cochée (état par défaut), lorsque le runtime .NET compile le code MSIL en code UC, les optimisations sont activées. Si l’option est cochée, le débogueur demande que les optimisations soient désactivées.
Vous pouvez configurer l’option Supprimer l’optimisation JIT sur le chargement de module (gérée uniquement) dans le voletOptions>, dans la section Tous les paramètres>généraux>débogage :
Vous pouvez configurer l’option Supprimer l’optimisation JIT sur le chargement de module (gérée uniquement) dans la boîte de dialogueOptions>, dans la sectionDébogage> :
Quand devez-vous vérifier l’option « Supprimer l’optimisation JIT » ?
Cochez cette option lorsque vous avez téléchargé les DLL à partir d’une autre source, telle qu’un package NuGet, et que vous souhaitez déboguer le code dans cette DLL. Pour que la suppression fonctionne, vous devez également trouver le fichier de symboles (.pdb) pour cette DLL.
Si vous souhaitez uniquement déboguer le code que vous générez localement, il est préférable de laisser cette option désactivée, car, dans certains cas, l’activation de cette option ralentit considérablement le débogage. Il existe deux raisons pour le ralentissement :
- Le code optimisé s’exécute plus rapidement. Si vous désactivez les optimisations pour un grand nombre de code, l’impact sur les performances peut s’ajouter.
- Si vous avez activé Just My Code, le débogueur n’essaie même pas de charger des symboles pour les DLL optimisées. La recherche de symboles peut prendre beaucoup de temps.
Limitations de l’option « Supprimer l’optimisation JIT »
Il existe deux scénarios où l’activation de cette option ne fonctionne PAS :
- Si vous attachez le débogueur à un processus déjà en cours d’exécution, cette option n’a aucun effet sur les modules déjà chargés au moment où le débogueur est attaché.
Cette option n’a aucun effet sur les DLL précompilées (ou ngen’ed) sur le code natif. Toutefois, vous pouvez désactiver l’utilisation du code précompilé en démarrant le processus avec la variable d’environnement « COMPlus_ReadyToRun » définie sur « 0 ». Cette approche indique au runtime .NET Core de désactiver l’utilisation d’images précompilées, ce qui force le runtime à compiler le code du framework JIT.
Si vous ciblez le .NET Framework, ajoutez la variable d’environnement « COMPlus_ZapDisable » et définissez-la sur « 1 ».
Paramétrez "COMPlus_ReadyToRun": "0" en l’ajoutant à chaque profil dans les propriétés\launchSettings.jsdu fichier :
{
"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"
}
}
}