このコードスニペットは見つかりましたが、デバッグ時にtrueが返されません。
[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
internal static extern bool IsDebuggerPresent();
このコードスニペットは見つかりましたが、デバッグ時にtrueが返されません。
[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
internal static extern bool IsDebuggerPresent();
はい:
System.Diagnostics.Debugger.IsAttached
あなたはあなたの質問にタグを付けたC#
ので、「しかし、デバッグ中にtrueを返さない」と言うとき、あなたは実際に管理されたデバッグについて話していると思います。
このIsDebuggerPresent()
関数は、ネイティブ デバッガーが存在するかどうかをチェックします。あなたの場合System.Diagnostics.Debugger.IsAttached
、(管理された)デバッガーが存在するかどうかを確認するために使用する必要があります。
デバッガー API の詳細については、このブログ投稿も参照してください。
最も似ている .NET Framework のメンバーIsDebuggerPresent()
は明らかに ですが、単純なDebugger.IsAttached
とはまったく異なる動作をするように、それらの内部動作はまったく異なります。Debugger.Log
OutputDebugString
Debugger.IsAttached
アタッチされたマネージ デバッガーの存在を CLR に要求し、ネイティブ デバッガーの存在を確認することさえしません。IsDebuggerPresent()
アタッチされたネイティブ デバッガーの存在をカーネルに要求し、マネージ デバッガーについてはまったく認識しません。Visual Studio 2013 の時点で、マネージド デバッガーはネイティブ デバッガーの上に構築されているため、VS でマネージド アプリケーションをデバッグする場合、 と の両方が true を返す必要がありますIsDebuggerPresent()
。Debugger.IsAttached
ただし、Visual Studio をマネージ アプリケーションにアタッチし、明示的にコード タイプをネイティブにオーバーライドした場合、IsDebuggerPresent()
は true を返しますが、 Debugger.IsAttached
false を返します。
最終的には、すべてはあなたが達成しようとしていることに帰着します。