有没有办法检测附加的调试器是不是是远程调试器?

Posted

技术标签:

【中文标题】有没有办法检测附加的调试器是不是是远程调试器?【英文标题】:Is there a way to detect whether the attached debugger is remote-debugger?有没有办法检测附加的调试器是否是远程调试器? 【发布时间】:2014-09-26 16:42:35 【问题描述】:

使用System.Diagnostics.Debugger.Debugger.IsAttached 我可以看出附加了一个调试器。有没有办法检测附加的调试器是否是远程调试器(Visual Studio Remote Debugger Monitor)?

【问题讨论】:

【参考方案1】:

你可以使用来自kernel32.dll的原生CheckRemoteDebuggerPresent

来自MSDN:

CheckRemoteDebuggerPresent 中的“远程”并不意味着 调试器必须驻留在不同的计算机上;相反,它 表示调试器驻留在单独的并行 过程。

您可以按如下方式使用它:

[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static extern bool CheckRemoteDebuggerPresent(IntPtr hProcess, ref bool isDebuggerPresent);

public static void Main()

    bool isDebuggerPresent = false;
    CheckRemoteDebuggerPresent(Process.GetCurrentProcess().Handle, ref isDebuggerPresent);

    Console.WriteLine(string.Format("Debugger Attached: 0", isDebuggerPresent));
    Console.ReadLine();

【讨论】:

以上是关于有没有办法检测附加的调试器是不是是远程调试器?的主要内容,如果未能解决你的问题,请参考以下文章

VS 远程调试问题

Visual Studio - 以编程方式将调试器附加到远程进程

远程调试 Web 服务时的问题

VS远程调试与附加调试

如何检测c++中是不是附加了调试器?

远程调试,附加到尚未启动的进程