Compartir a través de


Error: La evaluación de la función "function" superó el límite de tiempo y tuvo que ser interrumpida de manera no segura.

Texto de mensaje completo: La evaluación de la función 'function' superó el tiempo límite y tuvo que ser abortada de manera insegura. El problema puede causar la corrupción del proceso de destino.

Para facilitar la inspección del estado de los objetos .NET, el depurador forzará automáticamente al proceso depurado a ejecutar otro código (normalmente, métodos captadores de propiedades y funciones ToString). En la mayoría de los escenarios, estas funciones se completan rápidamente y facilitan la depuración. Sin embargo, el depurador no ejecuta la aplicación en un entorno seguro. Como resultado, un método getter o ToString de propiedad que llama a una función nativa que deja de responder puede dar lugar a tiempos de espera largos que podrían no ser recuperables. Si encuentra este mensaje de error, esto ha ocurrido.

Una razón común para este problema es que cuando el depurador evalúa una propiedad, solo permite que se ejecute el hilo que está siendo inspeccionado. Por lo tanto, si la propiedad está esperando a que otros subprocesos se ejecuten dentro de la aplicación depurada y, si está esperando de forma que el entorno de ejecución de .NET no pueda interrumpir, este problema se produce.

Para corregir este error

Consulte las secciones siguientes para ver varias posibles soluciones a este problema.

Solución 1: Impedir que el depurador llame a la propiedad getter o al método ToString

El mensaje de error indica el nombre de la función a la que intentó llamar el depurador. Si puede modificar esta función, puede impedir que el depurador llame al método getter o ToString de la propiedad. Pruebe una de las siguientes opciones:

  • Cambie el método a algún otro tipo de código además de un captador de propiedades o al método ToString y el problema desaparecerá.

    O bien:

  • (Para ToString) Defina un atributo DebuggerDisplay en el tipo y puede hacer que el depurador evalúe algo distinto de ToString.

    O bien:

  • (Para un captador de propiedades) Coloque el atributo System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never) en la propiedad . Esto puede ser útil si tiene un método que necesita quedar como una propiedad por razones de compatibilidad de API, aunque realmente debería ser tratado como un método.

Solución 2: Hacer que el código de destino pida al depurador que anule la evaluación.

El mensaje de error indica el nombre de la función a la que intentó llamar el depurador. Si el método getter o ToString de la propiedad a veces no se ejecuta correctamente, especialmente en situaciones en las que el problema es que el código necesita otro subproceso para ejecutar código, la función de implementación puede llamar a System.Diagnostics.Debugger.NotifyOfCrossThreadDependency para pedir al depurador que anule la evaluación de la función. Con esta solución, todavía es posible evaluar explícitamente estas funciones, pero el comportamiento predeterminado es que la ejecución se detiene cuando se produce la llamada NotifyOfCrossThreadDependency.

Solución 3: Deshabilitar toda la evaluación implícita

Si las soluciones anteriores no corrigen el problema, puede deshabilitar la opción Habilitar evaluación de propiedades y otras llamadas a funciones implícitas . Esta configuración deshabilita la mayoría de las evaluaciones de funciones implícitas y debe resolver el problema.

En el panelHerramientas>Opciones, expanda la sección Todos los ajustes>Debugging>General y desactive la casilla Habilitar evaluación de propiedades y otras llamadas a funciones implícitas.

En el cuadro de diálogo Opciones de herramientas>, expanda la sección Depuración> y desactive la casilla Habilitar evaluación de propiedades y otras llamadas de función implícitas.

Solución n.º 4: Comprobación de la compatibilidad con herramientas de desarrollo de terceros

Si usa Resharper, consulte este problema para obtener sugerencias.