我有一个 3rd 方库,它在内部做一些事情,当调试器连接时,即使在 Release模式下,它也会大大减慢速度。

我找到了 100 条关于如何通过转到 Debug -> Detach process 在 Visual Studio 中手动分离调试器的解释。但是,我还没有看到任何人提供一个示例,其中程序可以将任何附加的调试器与其自身分离。

基本上有 Debugger.Launch() 的分离版本吗?

最佳答案

根据 Why can't you detach in interop-debugging? ,CLR 不支持进程分离。但是 Visual Studio 可以做到。但是这篇文章已经有 5 年历史了,所以 你可以通过 pinvoke 从 Windows Api 使用 DebugActiveProcessStop 吗?

BOOL WINAPI DebugActiveProcessStop(
  __in  DWORD dwProcessId
);


[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DebugActiveProcessStop([In] int Pid );

编辑:刚刚试过这个:在当前进程中,即使提升,它也会拒绝访问。

CLR Managed Debugger (mdbg) Sample 20062011 version 中还有什么吗

最后这篇文章 explains what you need to do to use ICorDebug::Detach 和我想 Visual Studio 确实做到了这一点。

关于c# - 以编程方式分离调试器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7480518/

10-12 23:12