Modification du déroulement du programme lors de l'exécution sous un débogueur
Question
Est-il possible de détecter qu'un débogueur est en cours d'exécution dans la mémoire?
et voilà le formulaire sur pseudocode charge.
if debugger.IsRunning then
Application.exit
end if
Modifier Le titre original était "la détection d'un débogueur de mémoire"
La solution
Effectuez les opérations suivantes
if ( System.Diagnostics.Debugger.IsAttached ) {
...
}
Autres conseils
Deux choses à garder à l'esprit avant d'utiliser cette touche pour fermer une application en cours d'exécution dans le débogueur:
- Je l'ai utilisé un débogueur pour tirer une trace de plantage d'une application .NET commerciale et l'envoyer à l'entreprise où il a ensuite été fixé avec un remerciement pour le rendre facile et
- Ce contrôle peut être trivialement défaits.
Maintenant, pour être plus utile, voici comment utiliser cette détection pour garder func eval dans le débogueur de changer votre état de programme si vous avez un cache une propriété évaluée paresseusement pour des raisons de performance.
private object _calculatedProperty;
public object SomeCalculatedProperty
{
get
{
if (_calculatedProperty == null)
{
object property = /*calculate property*/;
if (System.Diagnostics.Debugger.IsAttached)
return property;
_calculatedProperty = property;
}
return _calculatedProperty;
}
}
J'ai aussi utilisé cette variante parfois pour assurer mon débogueur étape par ne saute pas l'évaluation:
private object _calculatedProperty;
public object SomeCalculatedProperty
{
get
{
bool debuggerAttached = System.Diagnostics.Debugger.IsAttached;
if (_calculatedProperty == null || debuggerAttached)
{
object property = /*calculate property*/;
if (debuggerAttached)
return property;
_calculatedProperty = property;
}
return _calculatedProperty;
}
}