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"

È stato utile?

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:

  1. 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
  2. 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
scroll top