使用可能なデバッグ スイッチはどうやって見つけますか?それとも、スイッチがあれば、何が無効になっているかがわかりますか?
-
09-06-2019 - |
質問
この中で 質問 答えは、デバッガーによって検出されるスイッチをオンにして、問題の原因となっている無関係なヘッダーを無効にすることでした。Microsoft のヘルプでは、これらのスイッチはユーザーが生成したものであることが示唆されており、スイッチのリストはありません。
<configuration>
<system.diagnostics>
<switches>
<add name="Remote.Disable" value="1" />
</switches>
</system.diagnostics>
</configuration>
私が知りたいのは、「Remote.Disable」という値がどこから来たのか、そして他のものをオンまたはオフに切り替えることができるかどうかをどのように調べるかです。現在のところ、それは単なる構成魔法であり、私は魔法が好きではありません。
解決
ご想像のとおり、Remote.Disable は、アプリがデバッグ情報をリモート要求に添付するのを停止します。これは、SOAP リクエストを作成する .NET Framework メソッド内で定義されます。
基本的な状況では、これらのスイッチはコード内のどこにでも定義でき、指定した名前で新しい 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 など) の使用法を検索できます。さまざまなスイッチは名前でハードコーディングされているため、私の知る限り、マスターリストはどこにもありません。