2010-07-07 11 views
7

Recientemente he migrado una gran cantidad de pruebas de precondición manual y lanzamiento de excepción con contratos de código. En lugar de actualizar a .NET 4, he estado usando el ensamblado Microsoft.Contracts.dll, por lo que podría mantener .NET 3.5 un poco más (esta es una biblioteca que se usa tanto con .NET 3.5 como con .NET 4). Configuré el reescritor de contratos en Visual Studio 2010 y los contratos funcionan bien.Contratos de código para .NET 3.5 arruina el depurador de VS10

Sin embargo, desde que hice ese cambio, me he dado cuenta de que el depurador actúa de forma divertida en los métodos con contratos, especialmente en clases con un ContractInvariantMethod. El cursor de ejecución no parece coincidir siempre con la línea resaltada, algunos puntos de corte no se activan y he tenido un método en el que el depurador no podía decir los nombres de las variables locales y mostraba cosas como CS$1$0000. Esto es en versiones de depuración.

¿Existen problemas conocidos sobre el uso de los contratos de código en Microsoft.Contracts.dll en .NET 3.5 a VS10? ¿Surgen problemas similares con los contratos de código en .NET 4?

[Editar] Esta pregunta me lleva a crear un error en Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in-iterator-methods-while-debugging

+0

[OT] Nombre de usuario impresionante :) – roundcrisis

Respuesta

1

Espero que sepa qué reescritura de contrato significa — código adicional generado sobre la marcha que no tiene ningún código fuente para el enganche del compilador. Con CLR teniendo tantos elementos diferentes, hay un buen número de cosas que el depurador no funcionará o se confundirán y solo las cosas que son características completas del lenguaje con un gran impacto obtienen el presupuesto para el soporte completo del depurador. Como expresiones lambda, por ejemplo.

Lo que no quiere decir que la presentación de un error no sea por una buena causa, solo que no debe esperar que algo mejore cuando se utiliza un aspecto que aún no está completamente desarrollado. Ser el primero en adoptar siempre tiene ese tipo de costo, pero también los derechos de fanfarronear :-)

+0

Sí, sé que la herramienta externa debe jugar con el IL y mover cosas. Desde que hice esta pregunta, migré a .NET 4 y no me he molestado nuevamente con este problema. Supongo que las herramientas de contratos de código para .NET 3.5 estaban incompletas en ese sentido. – Trillian

0

tienen en cuenta, que los contratos de código actualmente no funcionan con el poste condiciones & multithreading. limite los contratos para hacer solo la reescritura de condiciones previas. que resolvió muchos problemas en nuestro sistema.

+0

En realidad, en mi caso, simplemente activar la reescritura de contratos, incluso si la reescritura está configurada como nula, causa el problema Entonces, las postcondiciones no son el problema, y ​​no estoy haciendo multihilo. – Trillian

Cuestiones relacionadas