【问题标题】:How to detect if debugging如何检测是否调试
【发布时间】:2021-08-03 22:15:39
【问题描述】:

我有一个 .Net Core 控制台应用程序。在我的 startup.cs 的配置方法中,我试图测试是否启用了调试器:

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

HttpContext.Current.IsDebuggingEnabled 不支持 .Net 核心。我还没有找到适用于 .net core 的方法。

System.Diagnostics.DebuggableAttribute.DebuggingModes.Default 似乎也不起作用。

【问题讨论】:

标签: c# asp.net-core .net-core


【解决方案1】:

HttpContext 是另一个 HttpContext,因为您现在使用的是 ASP.NET Core。在 ASP.NET Core 变体中找不到该属性。 poke 给出了差异的解释。

我会使用Debugger.IsAttached,它不仅会检查是否启用了调试,还会主动进行调试。

【讨论】:

  • 我建议你修正你对HttpContext 的评论,因为你显然错过了这个问题是关于 ASP.NET Core 的,它通常一个控制台应用程序。 HttpContext.Current不起作用的原因是另一回​​事。
  • 你是对的。人们经常将 .NET Standard 和 .NET Core 混合在一起,所以我认为 OP 也是如此。我更新了我的答案。
  • @poke 你的权利。我总是忘记这一点。如果您有兴趣,它是来自我的身份服务器的代码。我还是 .net core 的新手
【解决方案2】:

HttpContext.Current 指的是 System.Web.HttpContext,它是旧 ASP.NET 中使用的 System.Web 命名空间的一部分。

ASP.NET Core 不使用 System.Web 命名空间中的类型,并且在旧 ASP.NET 世界中应用的任何内容都需要重新评估它是否仍然适用于 Microsoft.AspNetCore 命名空间中的适当新类型。

对于HttpContext,新类型是Microsoft.AspNetCore.Http.HttpContext。但是,它没有IsDebuggingEnabledthe old type had 属性。

原因是旧的 ASP.NET 是在 Web 服务器(最常见的是 IIS)中运行的应用程序,并且该 Web 服务器向应用程序提供 HttpContext。所以你必须使用HttpContext.Current 来访问那个上下文。

然而,在 ASP.NET Core 中,应用程序包括网络服务器,使得 ASP.NET Core 应用程序能够完全独立于它运行。现在,在使用 ASP.NET Core 进行调试时,您现在不是附加到父 Web 服务器,而是附加到 ASP.NET Core 应用程序本身的进程。这也是您通常创建命令行应用程序(包含带有应用程序代码的网络服务器)的原因。由于它们是普通(命令行)应用程序,因此您必须使用标准工具来确定是否附加了调试器。

通常的方法是检查Debugger.IsAttached

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

但是,请注意,调试器不需要在应用程序启动时立即附加。稍后仅在应用程序已经运行时附加调试器是完全可以的。这很重要,因为StartupWebHostBuilder 中的代码只会在应用程序启动时运行一次。因此,即使附加了调试器,注册您的日志记录提供程序的代码也可能在调试器尚未附加的时候运行。

【讨论】:

    【解决方案3】:

    如果你想在Debug而不是Release中运行一段代码,你可以使用#if预处理指令。

    #if(DEBUG)
      debug code here...
    #else
      release code here...
    #endif
    

    如果您不想在构建的发布版本中运行任何内容,请不要包含 else 块。

    【讨论】:

    • 这适用于 DEBUG 与 RELEASE 构建,并在编译时而不是运行时进行检查。附加调试器与使用调试符号构建之间存在巨大差异。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2021-12-30
    • 2020-02-19
    • 1970-01-01
    • 2012-03-06
    • 2016-08-08
    相关资源
    最近更新 更多