visual tiempo studio proyecto para modo modificar este ejecucion editar depurar depuracion continuar configuracion compilacion codigo cambie visual-studio-2010 xna hotswap edit-and-continue

tiempo - ¿Es posible editar y continuar en Visual Studio 2010 sin detener la ejecución?



modificar codigo en tiempo de ejecucion c# (5)

Puede que no sea exactamente lo que estás buscando, pero es lo que he estado haciendo. Solo arroja un punto de quiebre mientras tu juego se está ejecutando. Una vez que se detiene, puede editar cosas, eliminar el punto de interrupción y luego presionar F5 para continuar.

En su mayor parte, esto te permite editar cosas mientras el juego se está ejecutando y continuar ejecutando el juego después, pero no funciona para todo. No puede agregar o eliminar elementos de nivel de clase y tampoco puede agregar / eliminar funciones enteras o los parámetros. Principalmente, hago esto para probar diferentes números y ecuaciones para cosas más pequeñas que reciben cada actualización.

Hace poco vi un poco de la transmisión en vivo de Ludum Dare de Notch. Usa la característica de hotswins de Eclipse extensivamente mientras trabaja en su juego. (aquí hay un video de lo que me refiero a http://www.twitch.tv/notch/b/302823358?t=86m30s )

Me gustaría hacer lo mismo con C # y XNA. Afortunadamente, Visual Studio tiene una función Editar y Continuar. Sin embargo, me gustaría editar mi código de representación mientras se está ejecutando en lugar de pausarlo.

¿Puedo configurar Visual Studio para hacer lo mismo? Noté que hay una casilla de verificación para Break all processes when one process breaks . ¿Es posible configurar mi ciclo de representación en otro hilo para que el juego siga reproduciéndose mientras realizo un cambio?


Actualización: esta respuesta ahora está disponible como un video .

He estado luchando por encontrar una manera de hacer esto. Sé que esto no responde tu pregunta exacta. Pero realmente lo que estás buscando es un flujo de trabajo en el que puedas hacer cambios de código con un retraso nulo (o casi nulo), y creo que ya descubrí lo más cercano que puedes obtener con Visual Studio. (Y por lo tanto, evitando un gran esfuerzo de ingeniería y lidiando con proyectos "anormales").

La forma de lograr este flujo de trabajo es asombrosamente simple, una vez que lo piensas:

Use las teclas de atajo!

La primera forma en que se me ocurrió es usar el método normal de editar y continuar para establecer un punto de interrupción. Solo al usar el teclado puede hacer esto considerablemente más rápido. Esto solo funciona con un código que se llama en un bucle (por ejemplo: draw / update). Haga clic en el código que desea modificar, agregue un punto de interrupción ( F9 ), el punto de interrupción se golpeará casi de inmediato, modifique su código, elimine el breakoint ( F9 ) y luego vuelva a ejecutar el código ( F5 ).

Esto es bastante bueno No es necesario que use el mouse para alcanzar el objetivo relativamente pequeño "Añadir punto de corte" en la columna de la izquierda. Pero mueve el foco de entrada al principio de la línea, por lo que generalmente debe usar el mouse nuevamente para corregirlo antes de poder comenzar a editar.

Quiero algo más rápido. Así que se me ocurrió una mejor solución:

Nuevamente, usando el teclado: presione Ctrl + Alt + Break para "Romper todo". Esto ingresa al depurador casi al instante, sin tener que preocuparse por establecer un punto de interrupción o si el código que desea modificar se está ejecutando en un bucle. Esto cambiará la ventana del editor y el foco de atención en el documento donde se rompe la ejecución, pero puede corregirlo inmediatamente presionando Ctrl + - para "Navegar hacia atrás".

Luego puede hacer sus ediciones y simplemente presionar F5 para verlas en acción. Solo tiene que usar el mouse una vez (o no usarlo) para seleccionar inicialmente dónde desea comenzar a escribir, tal como se esperaría.

Es cierto que Ctrl + Alt + Break y Ctrl + - son combinaciones de teclas horribles para algo que quieres poder hacer extremadamente rápido. Y sería mejor si hubiera solo una tecla para presionar.

Si tiene Visual Studio completo, probablemente podría convertirlo en una macro o complemento. Express no los tiene, así que lo mejor que puedes hacer es modificar tus enlaces de teclas (Herramientas, Personalizar, Teclado ...) y vincularlo a dos teclas adyacentes, que puedes presionar en sucesión rápida. O use una utilidad macro externa.

Personalmente configuré las dos combinaciones de teclas que se presionarán en sucesión (no parece necesitar un retraso entre las dos) mediante una macro establecida en un botón de repuesto en mi mouse. Lo cual funciona razonablemente bien, ya que generalmente estoy seleccionando texto al mismo tiempo. También podría agregar una macro de teclado más tarde.

Hasta ahora he identificado dos trampas menores de este método:

  • Cuando ejecuta la aplicación de nuevo, Visual Studio le da enfoque. Sería bueno si mantuviera el foco. Agregar un clic con el botón izquierdo del mouse a mi macro es una solución parcial para volver a editar rápidamente el código.
  • "Navegar hacia atrás" no conserva la selección de texto, solo la posición de intercalación.

Para responder la pregunta original "en Visual Studio 2010 sin detener la ejecución?"

No. Para Java hay JRebel que permite esto.

Puedo imaginar rápidamente por qué Microsoft no ha hecho esto, si tiene algún tipo de comité o grupo de personas diseñando cosas, es fácil que incluso una sola persona presente buenos argumentos donde se rompa esta "actualización dinámica de software" / hotswap. Es demasiado fácil de derribar. O si continúan con esto, será a través de un "marco empresarial" completamente nuevo que requiere muchos pasos, trabajo y comprensión para llegar a cualquier parte, porque quieren usarlo para escenarios complicados en línea.

Preferiría que hubiera alguna forma simple de hacerlo: tomaré los riesgos y presentaré una gran cantidad de descargos de responsabilidad que indican que si quieres servicios de hotswap que hablen con sistemas externos, entonces necesitas usar ese complicado marco o lo que sea.

El escenario más típico donde se puede usar de manera segura y con bajo riesgo es crear prototipos y ajustar algún tipo de motor con un alto costo inicial o más probable, estudiar el comportamiento si algo funciona en el motor (como las reglas) tiene errores y exhibir el error , muchas cosas tienen que suceder y es posible que no encuentres el error siempre. Ese es el caso donde tener esto podría ahorrar semanas de tiempo de depuración, al menos tendría en mi caso.


Estoy acostumbrado a trabajar en Java usando IntelliJ Idea + DCEVM (Dynamic Code evolution VM).

Desafortunadamente, no encontré nada que se acercara a esa configuración en la plataforma Microsoft C #. Realmente apesta y no se puede hacer mucho al respecto. Puede usar algunas macros definidas por el usuario, pero aún no puede hacer mucho en los modos Editar y Continuar sin reiniciar la sesión de depuración.

Sin embargo, si puede, intente utilizar el .NET Core más nuevo, que ofrece una productividad mucho mejor con Dotnet Watch. Todavía no es tan rápido como DCEVM, pero es mucho mejor que la experiencia tradicional de recarga en caliente VS + .NET. Detalles aquí .


Puedo decirte cómo, pero no te va a gustar:

1) ejecuta tu juego ejecutable en una instancia de estudio visual ( game.exe -> vsInstanceA)

2) codifica tu código modificable en un dll separado, usando una instancia de estudio visual separada (modifiable.dll -> vsInstanceB)

* tenga en cuenta que hacer esto le permite compilar su modifiable.dll , haciendo así la verificación de error en tiempo de compilación, etc. *

... y ahora es donde se vuelve complicado ...

3a) game.exe necesita hacer referencia al modifiable.dll . NO el .vcproj, el dll real

3b) cuando presiona una "llave mágica" ( haga que game.exe busque una pulsación de tecla), haga que game.exe descargue el modifiable.dll y vuelva a cargarlo. Puede hacerlo fácilmente a través de las clases Assembly y AppDomain proporcionadas en mscorlib. Por supuesto, esto significa que debe descargar cualquier sistema dependiente en game.exe .

tenga en cuenta que en esta sección 3b) se agita demasiado la mano, es bastante trabajo pero bastante sencillo (por ejemplo, búsqueda de Google: https://www.google.com/search?q=dynamic+load+dll+. neto )

... y después de eso, eres bueno para ir ...

3-alt) algunas otras opciones si 3b) no le conviene:

  • Puede invocar msbuild.exe para reconstruir modifiable.dll cuando presiona "magic key"
  • Puede usar los dll del compilador CSharp para recompilar dinámicamente cada clase en lugar de modificar todo el archivo DLL.

pero desafortunadamente, en mis más de 10 años de desarrollo de .net, esta es la única forma, a menos que alguien haya creado un producto de terceros para hacerlo (IE: hacen lo que mencioné, para ti)