Pregunta

¿Hay alguna manera de detectar que un depurador se está ejecutando en la memoria?

y aquí viene la carga en el Formulario pseudocódigo.

if debugger.IsRunning then
Application.exit
end if

Editar El título original fue "la detección de un depurador de memoria"

¿Fue útil?

Solución

Pruebe lo siguiente

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

Otros consejos

Dos cosas a tener en cuenta antes de usar este para cerrar una aplicación que se ejecuta en el depurador:

  1. He utilizado un depurador para tirar de un accidente traza desde una aplicación .NET comercial y enviarlo a la empresa en la que se fija posteriormente con un agradecimiento para los que es fácil y
  2. Ese cheque puede ser trivialmente derrotados.

Ahora, para ser más útil, aquí es cómo utilizar esta detección para mantener func eval en el depurador de cambiar su estado del programa si tiene un caché de una propiedad evaluada perezosamente por razones de rendimiento.

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

También he utilizado esta variante a veces para asegurar mi depurador paso a través de no omitir la evaluación:

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top