如何找到可用的调试开关?或者给定一个开关找出被禁用的内容?

StackOverflow https://stackoverflow.com/questions/33334

  •  09-06-2019
  •  | 
  •  

在这个 问题 答案是打开调试器拾取的开关,禁用导致问题的无关标头。Microsoft 帮助暗示这些开关是用户生成的,并且没有列出任何开关。

<configuration>
  <system.diagnostics>
    <switches>
      <add name="Remote.Disable" value="1" />
    </switches>
  </system.diagnostics>
</configuration> 

我想知道的是“Remote.Disable”值从何而来以及如何找出可以打开或关闭哪些其他东西。目前它只是一些配置魔法,我不喜欢魔法。

有帮助吗?

解决方案

正如您所怀疑的,Remote.Disable 会阻止应用程序将调试信息附加到远程请求。它在发出 SOAP 请求的 .NET 框架方法内定义。

基本情况是这些开关可以在代码中的任何位置定义,您只需要使用给定的名称创建一个新的 System.Diagnostics.BooleanSwitch 并且配置文件可以控制它们。

这一特定的定义在 System.ComponentModel.CompModSwitches.DisableRemoteDebugging 中:

public static BooleanSwitch DisableRemoteDebugging
{
    get
    {
        if (disableRemoteDebugging == null)
        {
            disableRemoteDebugging = new BooleanSwitch("Remote.Disable", "Disable remote debugging for web methods.");
        }
        return disableRemoteDebugging;
    }
}

在你的情况下,它可能是从调用的 System.Web.Services.Protocols.RemoteDebugger.IsClientCallOutEnabled(), ,正在被调用 System.Web.Services.Protocols.WebClientProtocol.NotifyClientCallOut 依次由 Invoke 方法调用 System.Web.Services.Protocols.SoapHttpClientProtocol

不幸的是,据我所知,缺乏反编译框架和搜索

new BooleanSwitch

或任何其他继承人 系统.诊断.开关 课堂,没有简单的方法可以知道哪些开关已定义。这似乎是在 msdn/google/stack Overflow 中搜索特定案例的情况

在这种情况下,我只是使用 Reflector 并搜索 Remote.Disable 字符串

其他提示

您可以使用 Reflector 来搜索 Switch 类及其子类(BooleanSwitch、TraceSwitch 等)的使用。各种开关都是按名称硬编码的,所以据我所知,某处没有主列表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top