Alterar o fluxo do programa ao ser executado sob um depurador
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"
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:
- 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
- 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