Cambiare il flusso del programma durante l'esecuzione in un debugger
Domanda
C'è un modo di rilevare che un debugger è in esecuzione in memoria?
e qui viene il sul Form Load pseudocodice.
if debugger.IsRunning then
Application.exit
end if
Modifica Il titolo originale era "il rilevamento di un debugger di memoria"
Soluzione
Prova il seguente
if ( System.Diagnostics.Debugger.IsAttached ) {
...
}
Altri suggerimenti
Due cose da tenere a mente prima di utilizzare questo per chiudere un'applicazione in esecuzione nel debugger:
- Ho usato un debugger per tirare una traccia incidente da un'applicazione commerciale .NET e inviarlo alla società in cui è stato fissato successivamente con un ringraziamento per rendere facile e
- Questo controllo può essere banalmente sconfitti.
Ora, per essere più utile, ecco come utilizzare questa rilevazione per mantenere func eval nel debugger di cambiare il vostro stato programma se si dispone di una cache di una proprietà valutata pigramente per motivi di prestazioni.
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;
}
}
Inoltre ho usato questa variante, a volte per assicurare il mio debugger step-through non ignorare la valutazione:
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;
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow