web-dev-qa-db-fra.com

Comment détecter si le débogage

J'ai une application console .Net Core. Dans la méthode de configuration dans mon startup.cs j'essaye de tester si le débogueur est activé ou non:

 if (HttpContext.Current.IsDebuggingEnabled)
     loggerFactory.AddConsole(Configuration);
 else
     loggerFactory.AddConsoleJson(Configuration);

HttpContext.Current.IsDebuggingEnabled ne semble pas être pris en charge dans le noyau .Net. Je n'ai pas pu trouver une méthode qui fonctionne dans le noyau .net.

System.Diagnostics.DebuggableAttribute.DebuggingModes.Default ne semble pas fonctionner non plus.

18
DaImTo

HttpContext est un autre HttpContext que celui auquel vous étiez habitué puisque vous utilisez maintenant ASP.NET Core. Cette propriété est introuvable dans la variante ASP.NET Core. Une explication des différences est donnée par poke .

J'utiliserais Debugger.IsAttached, qui vérifie non seulement si le débogage est activé, mais également en cours de débogage.

40
Patrick Hofman

HttpContext.Current fait référence à System.Web.HttpContext qui fait partie du System.Web espace de noms utilisé dans l'ancien ASP.NET.

ASP.NET Core n'utilise pas de types dans le System.Web namespace, et tout ce qui s'appliquait dans l'ancien monde ASP.NET devra être réévalué s'il fonctionne toujours avec les nouveaux types appropriés dans le Microsoft.AspNetCore espace de noms.

Pour le HttpContext, le nouveau type est Microsoft.AspNetCore.Http.HttpContext . Cependant, il n'a pas de propriété IsDebuggingEnabled qui l'ancien type avait .

La raison en est que l'ancien ASP.NET était une application qui s'exécutait à l'intérieur d'un serveur Web (le plus souvent IIS), et que ce serveur Web fournissait le HttpContext à l'application. Vous avez donc dû utiliser HttpContext.Current pour accéder à ce contexte.

Dans ASP.NET Core cependant, l'application inclut le serveur Web, ce qui rend les applications ASP.NET Core capables de s'exécuter complètement indépendamment de cela. Maintenant, lors du débogage, au lieu de l'attacher au serveur Web parent, avec ASP.NET Core, vous vous attachez maintenant au processus de l'application ASP.NET Core elle-même. C'est aussi pourquoi vous créez généralement des applications en ligne de commande (qui contiennent le serveur Web avec votre code d'application). Et comme ce sont des applications normales (ligne de commande), vous devrez utiliser les outils standard pour déterminer si le débogueur est connecté ou non.

La manière habituelle pour cela est de vérifier Debugger.IsAttached pour cela:

if (Debugger.IsAttached)
{
    // debugger is attached
}

Cependant, notez que les débogueurs ne sont pas tenus de se joindre à droite lors du lancement d'une application. Il est parfaitement correct de n'attacher le débogueur que plus tard lorsque l'application est déjà en cours d'exécution. Ceci est important car le code de votre Startup ou de votre WebHostBuilder ne s'exécutera qu'une seule fois au démarrage de l'application. Il est donc possible que même avec le débogueur attaché, le code qui a enregistré votre fournisseur de journalisation s'exécute à un moment où le débogueur n'était pas encore attaché.

6
poke