Partilhar via


Erro: A avaliação da função 'função' ultrapassou o limite de tempo e precisou ser abortada de maneira insegura

Texto da mensagem completa: A avaliação da função 'função' excedeu o tempo limite e precisou ser abortada de maneira não segura. O problema pode causar a danificação do processo alvo.

Para facilitar a inspeção do estado de objetos .NET, o depurador forçará automaticamente o processo em depuração a executar outro código (normalmente métodos acessores de propriedade e funções ToString). Na maioria dos cenários, essas funções são concluídas rapidamente e facilitam a depuração. No entanto, o depurador não executa a aplicação em um sandbox. Como resultado, um getter de propriedade ou método ToString que chama uma função nativa que para de responder pode levar a longos tempos limite que podem não ser recuperáveis. Se você encontrar essa mensagem de erro, isso ocorreu.

Uma razão comum para esse problema é que, quando o depurador avalia uma propriedade, ele só permite que o thread que está sendo inspecionado seja executado. Portanto, se a propriedade estiver aguardando em outros threads para ser executada dentro do aplicativo depurado e se estiver aguardando de uma forma que o .NET Runtime não seja capaz de interromper, esse problema acontecerá.

Para corrigir este erro

Consulte as seções a seguir para obter várias soluções possíveis para esse problema.

Solução #1: Impedir que o depurador chame a propriedade getter ou o método ToString

A mensagem de erro indica o nome da função que o depurador tentou chamar. Se você puder modificar essa função, poderá impedir que o depurador chame a propriedade getter ou o método ToString. Tente uma das seguintes opções:

  • Altere o método para algum outro tipo de código, além de um acessador de propriedade ou do método ToString, e o problema desaparecerá.

    -ou-

  • (Para ToString) Defina um atributo DebuggerDisplay no tipo e você pode fazer com que o depurador avalie algo diferente de ToString.

    -ou-

  • (Para um comprador de propriedade) Coloque o atributo System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never) na propriedade. Isso pode ser útil se você tiver um método que precisa permanecer uma propriedade por motivos de compatibilidade de API, mas deve realmente ser um método.

Solução #2: Faça com que o código de destino instrua o depurador a interromper a avaliação

A mensagem de erro indica o nome da função que o depurador tentou chamar. Se o acessador de propriedade ou o método ToString às vezes não forem executados corretamente, especialmente em situações onde o código necessita que outro thread seja executado, a função implementada pode chamar System.Diagnostics.Debugger.NotifyOfCrossThreadDependency para pedir ao depurador que aborte a avaliação da função. Com essa solução, ainda é possível avaliar explicitamente essas funções, mas o comportamento padrão é que a execução para quando ocorre a chamada NotifyOfCrossThreadDependency.

Solução #3: Desative toda a avaliação implícita

Se as soluções anteriores não corrigirem o problema, você poderá desativar a opção Habilitar avaliação de propriedades e outras chamadas de função implícitas . Esta configuração desativa a maioria das avaliações de função implícitas e deve resolver o problema.

No painel Ferramentas>, expanda a seção Todas as Configurações>> e desmarque a caixa de seleção Ativar avaliação de propriedades e outras chamadas de função implícitas.

Na caixa Ferramentas>Opções, expanda a seção Depuração>Geral, e desmarque a caixa de seleção Habilitar avaliação de propriedades e outras chamadas de função implícitas.

Solução #4: Verifique a compatibilidade com ferramentas de desenvolvedor de terceiros

Se você estiver usando o Resharper, consulte este problema para obter sugestões.