Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Texte intégral du message : L'évaluation de la fonction 'function' a dépassé le délai d'attente et a dû être interrompue de manière non sécurisée. Le problème peut entraîner une altération du processus cible.
Pour faciliter l’inspection de l’état des objets .NET, le débogueur force automatiquement le processus débogué à exécuter d’autres codes (généralement des méthodes getter de propriété et des fonctions ToString). Dans la plupart des scénarios, ces fonctions se terminent rapidement et facilitent le débogage. Toutefois, le débogueur n’exécute pas l’application dans un sandbox. Par conséquent, une méthode getter ou ToString de propriété qui appelle une fonction native qui arrête de répondre peut entraîner des délais d’expiration longs qui peuvent ne pas être récupérables. Si vous rencontrez ce message d’erreur, cela s’est produit.
Une des raisons courantes de ce problème est que lorsque le débogueur évalue une propriété, il permet uniquement au thread inspecté de s'exécuter. Par conséquent, si la propriété attend que d’autres threads s’exécutent à l’intérieur de l’application déboguée et si elle attend d’une manière que le runtime .NET ne puisse pas interrompre, ce problème se produit.
Pour corriger cette erreur
Consultez les sections suivantes pour connaître plusieurs solutions possibles à ce problème.
Solution n°1 : Empêcher le débogueur d’appeler la propriété getter ou la méthode ToString
Le message d’erreur indique le nom de la fonction que le débogueur a essayé d’appeler. Si vous pouvez modifier cette fonction, vous pouvez empêcher le débogueur d’appeler la méthode getter ou ToString de propriété. Essayez l’une des opérations suivantes :
Remplacez la méthode par un autre type de code en plus d’une méthode getter de propriété ou ToString, et le problème disparaîtra.
- ou -
(Pour ToString) Définissez un attribut DebuggerDisplay sur le type et vous pouvez avoir le débogueur évaluer quelque chose d’autre que ToString.
- ou -
(Pour une propriété getter) Placez l’attribut System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never) sur la propriété. Cela peut être utile si vous avez une méthode qui doit rester une propriété pour des raisons de compatibilité d’API, mais il doit vraiment s’agir d’une méthode.
Solution n°2 : Demander au code cible de demander au débogueur d’abandonner l’évaluation.
Le message d’erreur indique le nom de la fonction que le débogueur a essayé d’appeler. Si le getter de propriété ou la méthode ToString échoue parfois à fonctionner correctement, en particulier dans les situations où le problème est que le code nécessite un autre thread pour s'exécuter, la fonction d’implémentation peut appeler System.Diagnostics.Debugger.NotifyOfCrossThreadDependency pour demander au débogueur d’abandonner l’évaluation de la fonction. Avec cette solution, il est toujours possible d’évaluer explicitement ces fonctions, mais le comportement par défaut est que l’exécution s’arrête lorsque l’appel NotifyOfCrossThreadDependency se produit.
Solution n° 3 : Désactiver toutes les évaluations implicites
Si les solutions précédentes ne résolvent pas le problème, vous pouvez désactiver l’option Activer l’évaluation des propriétés et d’autres appels de fonction implicites . Cette configuration désactive la plupart des évaluations de fonction implicites et doit résoudre le problème.
Dans le volet Options>des outils, développez la section Tous les paramètres>Débogage>Général, puis décochez la case Activer l’évaluation des propriétés et d’autres appels de fonction implicites.
Dans la boîte de dialogueOptions>, développez la section Débogage>général et décochez la case Activer l’évaluation des propriétés et d’autres appels de fonction implicites.
Solution n°4 : Vérifier la compatibilité avec les outils de développement tiers
Si vous utilisez Resharper, consultez ce problème pour obtenir des suggestions.