visual studio saber puntos punto proceso net los interrupción interrupcion funcionan esta desencadenado depurar corriendo como asociar adjuntar c# debugging

studio - ¿Hay alguna manera de detectar si un depurador está conectado a un proceso desde C#?



saber si un proceso esta corriendo c# (5)

Tengo un programa que Process.Start () es otro programa y lo apaga después de N segundos.

Algunas veces elijo adjuntar un depurador al programa iniciado. En esos casos, no quiero que el proceso se cierre después de N segundos.

Me gustaría que el programa host detecte si un depurador está conectado o no, por lo que puede optar por no cerrarlo.

Aclaración: no estoy buscando detectar si un depurador está conectado a mi proceso, estoy buscando detectar si un depurador está conectado al proceso que generé.


¿Se está depurando el proceso actual ?

var isDebuggerAttached = System.Diagnostics.Debugger.IsAttached;

¿Se está depurando otro proceso?

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);

Dentro de una extensión de Visual Studio

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




Sé que esto es viejo, pero estaba teniendo el mismo problema y me di cuenta de que si tienes un puntero al EnvDTE, puedes verificar si el proceso está en Dte.Debugger.DebuggedProcesses :

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

La llamada CheckRemoteDebuggerPresent solo comprueba si el proceso se depura de forma nativa, creo que no funcionará para detectar la depuración administrada.


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