73 votes

Existe-t-il un moyen de détecter si un débogueur est attaché à un processus à partir de C #?

J'ai un programme de ce Processus.Start()'s d'un autre programme, et qu'il s'arrête après N secondes.

Parfois, je choisis d'attacher un débogueur pour le programme. Dans ces cas, je ne veux pas le processus d'arrêt après N secondes.

J'aimerais que le programme d'accueil pour détecter si un débogueur est attaché ou pas, donc il peut choisir de ne pas l'arrêter.

Précision: je ne cherche pas à détecter si un débogueur est attaché à mon processus, je suis à la recherche pour détecter si un débogueur est attaché au processus, que j'ai engendré.

179voto

Bryan Watts Points 22810
if(System.Diagnostics.Debugger.IsAttached)
{
    // ...
}

21voto

itowlson Points 44174

Vous devrez P / Invoke jusqu'à CheckRemoteDebuggerPresent . Cela nécessite un handle vers le processus cible, que vous pouvez obtenir à partir de Process.Handle.

5voto

Aeka Points 51

Je sais que c'est vieux, mais j'avais le même problème et je me suis rendu compte que si vous avez un pointeur sur EnvDTE, vous pouvez vérifier si le processus est bien dans Dte.Debugger.DebuggedProcesses :

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

L'appel CheckRemoteDebuggerPresent vérifie uniquement si le processus est en cours de débogage natif, je crois - cela ne fonctionnera pas pour la détection du débogage géré.

1voto

Arek S Points 11

Vous pouvez consulter mon dernier article sur la détection d'un débogueur dans le système Windows, ici: http://blog.szulak.net/programming/basic-debugger-detection-techniques-in-windows/

0voto

Adi Points 2302

La solution pour moi est Debugger.IsAttached comme décrit ici: http://www.fmsinc.com/free/NewTips/NET/NETtip32.asp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X