3

コードで「通常のプロセス コンテキストで実行している」と「デバッガのイミディエイト ウィンドウから実行された」の違いを見分ける方法はありますか?

パブリック プロパティを公開するライブラリ オブジェクトがあります。そのライブラリのリリース バージョンを使用しているときに、そのライブラリを含む DLL をロードしたアプリケーションをデバッグしているときに、イミディエイト ウィンドウ (x.prop = true) からプロパティを変更すると、プロパティ コードでこれを検出して実行するようにしたいと考えています。違う。

これを検出する方法はありますか?

便宜上、そのライブラリのデバッグ バージョンを使用しているときにもこれを機能させたいと考えています。そのため、デバッガーが接続されているかどうかを確認して、そこから分岐することはできません。

4

2 に答える 2

2

私が常に気付いていることの 1 つは、イミディエイト ウィンドウからの呼び出しには、次の名前空間から発信された呼び出しが少なくとも 1 つ含まれていることです。

Microsoft.VisualStudio.HostingProcess

もしそうなら、次のように言ってください。

public static string DumpStack()
{
    return new StackTrace().ToString();
}

次のようなものが表示されます。

   at ConsoleApplication1.Program.DumpStack()
   at ConsoleApplication1.Program.Main(String[] args)
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
于 2012-09-29T06:09:36.590 に答える