Partager via


Erreur : le processus cible s’est arrêté avec le code 'code' lors de l’évaluation de la fonction 'function'

Texte intégral du message : le processus cible s'est terminé avec le code « code » lors de l'évaluation de la fonction « function ».

Pour faciliter l'inspection de l'état des objets .NET, le débogueur force automatiquement le processus en cours de débogage à exécuter d'autres parties de code, généralement des fonctions et des getters de propriété. Dans la plupart des scénarios, ces fonctions s'exécutent avec succès ou lèvent des exceptions qui peuvent être interceptées par le débogueur. Toutefois, il existe certaines circonstances dans lesquelles les exceptions ne peuvent pas être interceptées, car elles dépassent les limites du noyau, nécessitent une pompe de messages utilisateur ou sont irrécupérables. Par conséquent, une méthode getter ou ToString de propriété qui exécute du code mettant explicitement fin au processus (par exemple, appelant ExitProcess()) ou lève une exception non gérée qui ne peut pas être interceptée (par exemple, StackOverflowException) met fin au processus débogué et termine la session de débogage. 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é qui s’appelle elle-même, cela peut entraîner une exception de dépassement de capacité de pile. L’exception de dépassement de capacité de pile ne peut pas être récupérée et le processus cible se termine.

Pour corriger cette erreur

Il existe deux 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 affiche le nom de la fonction que le débogueur a essayé d’appeler. Avec le nom de la fonction, vous pouvez essayer de réévaluer cette fonction à partir de la fenêtre Immédiate pour déboguer l’évaluation. Le débogage est possible lors de l’évaluation à partir de la fenêtre Immédiat, car, contrairement aux fenêtres implicites Autos/Locals/Watch, le débogueur s’interrompt sur les exceptions non gérées.

Si vous pouvez modifier cette fonction, vous pouvez empêcher le débogueur d’appeler le getter de propriété ou la méthode ToString. Essayez l’une des opérations suivantes :

  • Changez la méthode pour un autre type de code autre qu'un getter de propriété ou une méthode ToString() et le problème se résout.

    - ou -

  • (Pour ToString) Définissez un DebuggerDisplay attribut sur le type et vous pouvez faire en sorte que le débogueur évalue quelque chose d’autre que ToString.

    - ou -

  • (Pour un accesseur de propriété) Ajoutez l’attribut [System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never)] à 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.

Si vous ne pouvez pas modifier cette méthode, vous pouvez peut-être interrompre le processus cible à une autre instruction et réessayer l’évaluation.

Solution n°2 : Désactiver toutes les évaluations implicites

Si les solutions précédentes ne résolvent pas le problème, vous pouvez désactiver la fonctionnalité Activer l’évaluation des propriétés .

Ouvrez le volet Outils>Options et développez la section Tous les paramètres>Débogage>Général. Décochez la case Activer l’évaluation des propriétés et d’autres appels de fonction implicites.

Ouvrez la boîte de dialogueOptions> et développez la section Débogage>général. Décochez la case Activer l’évaluation des propriétés et d’autres appels de fonction implicites .

Cette modification désactive la plupart des évaluations de fonction implicites et doit résoudre le problème.