C# 使用ClrMD连接到自身?HRESULT:0x80070057

C# 使用ClrMD连接到自身?HRESULT:0x80070057,c#,.net,debugging,clrmd,C#,.net,Debugging,Clrmd,我正在尝试将进程中的ClrMD附加到自身: private static void Main() { var pid=Process.GetCurrentProcess().Id; 写线($“PID:{PID}”); 使用(var dataTarget=dataTarget.AttachToProcess(pid,1000)) { WriteLine($“附加ClrMD”); } } 但是,我得到了以下例外情况: PID:7416 未处理的异常:Microsoft.Diagnostics.Ru

我正在尝试将进程中的ClrMD附加到自身:

private static void Main()
{
var pid=Process.GetCurrentProcess().Id;
写线($“PID:{PID}”);
使用(var dataTarget=dataTarget.AttachToProcess(pid,1000))
{
WriteLine($“附加ClrMD”);
}
}
但是,我得到了以下例外情况:

PID:7416
未处理的异常:Microsoft.Diagnostics.Runtime.ClrDiagnosticsException:无法附加到pid 1CF8,HRESULT:0x80070057
在Microsoft.Diagnostics.Runtime.DbGengDarReader..ctor(Int32 pid,AttachFlag标志,UInt32 msecTimeout)
在Microsoft.Diagnostics.Runtime.DataTarget.AttachToProcess(Int32 pid,UInt32 msecTimeout,AttachFlag AttachFlag)
在Microsoft.Diagnostics.Runtime.DataTarget.AttachToProcess(Int32 pid,UInt32 msecTimeout)
位于BanksySan.Scratch.Console.Program.Main(字符串[]args)

I可以在被动模式下连接,但不能在侵入或非侵入模式下连接。

侵入
标志允许此API的使用者通过正常的IDebug函数调用控制目标进程。此操作将暂停进程(在连接期间),以获取数据并控制目标进程

非侵入性
调试器连接中,进程将由此暂停(在连接期间),并且能够获取数据,但调用者无法控制目标进程。当进程已经附加了调试器时,这非常有用


执行
被动
附加意味着没有调试器实际附加到目标进程。进程没有暂停,因此对快速变化的数据(如GC堆或调用堆栈的内容)的查询将非常不一致,除非用户通过其他方式暂停进程。使用ICorDebug(托管调试器)进行附加时,它非常有用,因为您不能使用ICorDebug的非侵入性附加。

您可以使用
DataTarget.createSnapshot和attach
。 此方法创建流程的快照,并从中创建
DataTarget
。 例如:


有人知道这是否是因为
侵入式
和非侵入式`模式都作为调试器附加,并且(我假设)调试器不能附加到自身?
var processId = Process.GetCurrentProcess().Id;

using (var dataTarget = DataTarget.CreateSnapshotAndAttach(processId))
{
}