반응형
디버거가 C #의 다른 프로세스에 연결되어 있는지 감지하는 방법이 있습니까?
Process.Start()
다른 프로그램 이있는 프로그램이 있는데 N 초 후에 종료됩니다.
때로는 시작된 프로그램에 디버거를 연결하기로 선택합니다. 이 경우 N 초 후에 프로세스가 종료되는 것을 원하지 않습니다.
호스트 프로그램이 디버거가 연결되어 있는지 여부를 감지하여 종료하지 않도록 선택할 수 있기를 바랍니다.
설명 : 디버거가 내 프로세스에 연결되어 있는지 감지하지 않고 디버거가 내가 생성 한 프로세스에 연결되어 있는지 감지하려고합니다.
CheckRemoteDebuggerPresent 로 P / 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
반응형
'code' 카테고리의 다른 글
MongoDB가 작동하지 않습니다. (0) | 2020.11.19 |
---|---|
임시 비밀번호를 자동으로 생성 한 후 MySQL에 액세스 할 수 없습니다. (0) | 2020.11.19 |
MySql에서 DATETIME 필드의 날짜 부분에 인덱스를 만드는 방법 (0) | 2020.11.18 |
Visual Studio가 설치되지 않은 컴퓨터에서 FUSLOGVW.EXE 사용 (0) | 2020.11.18 |
명령 줄에서 WAR의 클래스를 어떻게 실행합니까? (0) | 2020.11.18 |