code

디버거가 C #의 다른 프로세스에 연결되어 있는지 감지하는 방법이 있습니까?

codestyles 2020. 11. 19. 08:13
반응형

디버거가 C #의 다른 프로세스에 연결되어 있는지 감지하는 방법이 있습니까?


Process.Start()다른 프로그램 이있는 프로그램이 있는데 N 초 후에 종료됩니다.

때로는 시작된 프로그램에 디버거를 연결하기로 선택합니다. 이 경우 N 초 후에 프로세스가 종료되는 것을 원하지 않습니다.

호스트 프로그램이 디버거가 연결되어 있는지 여부를 감지하여 종료하지 않도록 선택할 수 있기를 바랍니다.

설명 : 디버거가 프로세스에 연결되어 있는지 감지하지 않고 디버거가 내가 생성 한 프로세스에 연결되어 있는지 감지하려고합니다.


CheckRemoteDebuggerPresentP / Invoke 다운해야 합니다 . 이를 위해서는 Process.Handle에서 가져올 수있는 대상 프로세스에 대한 핸들이 필요합니다.


if(System.Diagnostics.Debugger.IsAttached)
{
    // ...
}

는 IS 현재의 프로세스가 디버깅중인?

var isDebuggerAttached = System.Diagnostics.Debugger.IsAttached;

되어 다른 프로세스가 디버깅중인?

Process process = ...;
bool isDebuggerAttached;
if (!CheckRemoteDebuggerPresent(process.Handle, out isDebuggerAttached)
{
    // handle failure (throw / return / ...)
}
else
{
    // use isDebuggerAttached
}


/// <summary>Checks whether a process is being debugged.</summary>
/// <remarks>
/// The "remote" in CheckRemoteDebuggerPresent does not imply that the debugger
/// necessarily resides on a different computer; instead, it indicates that the 
/// debugger resides in a separate and parallel process.
/// <para/>
/// Use the IsDebuggerPresent function to detect whether the calling process 
/// is running under the debugger.
/// </remarks>
[DllImport("Kernel32.dll", SetLastError=true, ExactSpelling=true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool CheckRemoteDebuggerPresent(
    SafeHandle hProcess,
    [MarshalAs(UnmanagedType.Bool)] ref bool isDebuggerPresent);

Visual Studio 확장 내

Process process = ...;
bool isDebuggerAttached = Dte.Debugger.DebuggedProcesses.Any(
    debuggee => debuggee.ProcessID == process.Id);

나는 이것이 오래되었다는 것을 알고 있지만 동일한 문제가 있었고 EnvDTE에 대한 포인터가 있으면 프로세스가 Dte.Debugger.DebuggedProcesses에 있는지 확인할 수 있음을 깨달았습니다 .

foreach (EnvDTE.Process p in Dte.Debugger.DebuggedProcesses) {
  if (p.ProcessID == spawnedProcess.Id) {
    // stuff
  }
}

CheckRemoteDebuggerPresent 호출은 프로세스가 기본적으로 디버깅되고 있는지 여부 만 확인합니다. 관리되는 디버깅을 감지하는 데는 작동하지 않습니다.


나를위한 솔루션은 여기에 설명 된 Debugger.IsAttached입니다. http://www.fmsinc.com/free/NewTips/NET/NETtip32.asp

참고 URL : https://stackoverflow.com/questions/2188201/is-there-a-way-to-detect-if-a-debugger-is-attached-to-another-process-from-c

반응형