Estoy tratando de recorrer el código de un constructor estático mientras estoy en modo de interrupción.
El proyecto es C#/.NET 4.7.2/64 bits/WinForms. La versión de Visual Studio es 2019 16.9.4 Community.
Visual Studio se interrumpe correctamente cuando llega al punto de interrupción establecido en el constructor estático. Luego puedo recorrer el código usando el comando "Pasar a" (F11). Como puede ver, el constructor estático llama a un método estático que hace el trabajo pesado.
El código contiene un bucle que debería repetirse 10 veces. Debería poder pasar por todas las iteraciones. En cambio, después de la primera iteración, la depuración salta repentinamente a, o "reanuda", en algún punto mucho más tarde, de regreso a la clase que llama (o más exactamente, la clase que activó el CLR para ejecutar el constructor estático). Por lo tanto, no puedo pasar por las 9 iteraciones restantes.
Estoy seguro de que todas las iteraciones se ejecutan, porque agregué un código de depuración para imprimir algo cada vez que se ejecuta el bloque finally
. Pero, estoy frustrado porque no puedo recorrer el código. Parece un error de VS del tipo ridículo, ya que es algo bastante fundamental poder recorrer el código durante la depuración.
Debido a que el problema es tan difícil de describir bien, he creado un GIF animado para mostrar visualmente la sesión de depuración:
He buscado en la web a lo largo y ancho y no puedo encontrar a nadie más que informe el tipo de problema que estoy aquí. Lo que me hace preguntarme si estoy haciendo algo mal (por ejemplo, ¿necesito ajustar algunas configuraciones del depurador o algo así?). Cualquier ayuda o idea es muy apreciada.
ACTUALIZAR
No puedo reproducir el problema en compilaciones de depuración de 32 bits. El problema (hasta ahora) solo está presente en las compilaciones de depuración de 64 bits.
COMO REPRODUCIR
Hice un pequeño proyecto de demostración. Siéntase libre de descargar y probar la depuración por sí mismo. Cuando se alcanza el punto de interrupción, use F11 para recorrer el código. A ver si puedes pasar por el bucle 10 veces ;-)
Proyecto de prueba de depuración (VS2019)
Por mi parte, el problema desaparece si cambio la configuración de compilación de x64
a Any CPU
. Por lo tanto, puede ser un problema solo de 64 bits.
El bloque try/finally
parece revelar el problema. No estoy seguro de qué otros patrones también podrían revelar el problema.
INFORME DE ERROR ARCHIVO
https://developercommunity.visualstudio.com/t/The-debugger-does-not-step-through-a-met/1407274
Es un error en el tiempo de ejecución de .NET. Puedes rastrear el error aquí: