Pergunta

Existe alguma maneira de detectar que um depurador está em execução na memória?

E aqui vem o pseudocódigo de carga no formulário.

if debugger.IsRunning then
Application.exit
end if

Editar: O título original era "Detectar um depurador na memória"

Foi útil?

Solução

Experimente o seguinte

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

Outras dicas

Duas coisas a ter em mente antes de usá -lo para fechar um aplicativo em execução no depurador:

  1. Eu usei um depurador para puxar um traço de acidente de um aplicativo comercial .NET e enviá -lo para a empresa onde foi posteriormente consertado com um agradecimento por facilitar e
  2. Essa verificação pode ser trivialmente derrotado.

Agora, para ser mais útil, veja como usar essa detecção para manter funct aval No depurador de mudar o estado do seu programa, se você tiver um cache, uma propriedade preguiçosamente avaliada por motivos de desempenho.

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

Às vezes, também usei essa variante para garantir que meu passo depurador não ignore a avaliação:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top