Es una cantidad sorprendentemente no trivial de trabajo, que abarca muchas decisiones de diseño y las compensaciones de características. Considera: estás depurando. El debugee está suspendido. Su imagen en la memoria contiene el código objeto de la fuente y el diseño binario de los objetos, el montón, las pilas. El depurador está inspeccionando su imagen de memoria. Ha cargado información de depuración sobre los símbolos, tipos, asignaciones de direcciones, pc (ip) a las correspondencias de origen.Muestra la pila de llamadas, valores de datos.
Ahora desea permitir un conjunto particular de posibles modificaciones al código y/o datos, sin detener el depuración y reiniciar. Lo más simple podría ser cambiar una línea de código a otra. Quizás recompilas ese archivo o solo esa función o solo esa línea. Ahora debe parchear la imagen de depuración para ejecutar esa nueva línea de código la próxima vez que la recorra o la ejecute. ¿Cómo funciona eso bajo el capó? ¿Qué sucede si el código es más grande que la línea de código que reemplazó? ¿Cómo interactúa con las optimizaciones del compilador? Quizás solo pueda hacer esto en un objetivo de depuración EnC especialmente compilado. Quizás restrinja sitios posibles, es legal para EnC. Considere: qué sucede si edita una línea de código en una función suspendida en la pila de llamadas. Cuando el código retorna, ¿ejecuta la versión original de la función o la versión con la línea modificada? Si es la versión original, ¿de dónde viene esa fuente?
¿Puede agregar o eliminar locales? ¿Qué hace eso con la pila de llamadas de marcos suspendidos? De la función actual?
¿Se puede cambiar la firma de la función? Agregar campos a/eliminar campos de los objetos? ¿Qué hay de las instancias existentes? ¿Qué hay de los destructores o finalizadores pendientes? Etc.
Hay muchos, muchos detalles de funcionalidad que se deben tener en cuenta para hacer que cualquier clase de EnC funcione. Luego hay muchos problemas de integración entre herramientas necesarios para proporcionar la infraestructura para alimentar EnC. En particular, ayuda tener algún tipo de repositorio de información de depuración que pueda poner a disposición la información de depuración antes y después de la edición y el código de objeto para el depurador. Para C++, la información de depuración incrementalmente actualizable en PDB ayuda. La vinculación incremental también puede ser útil.
Mirando desde el ecosistema MS hasta el ecosistema GCC, es fácil imaginar la complejidad y los problemas de integración en GDB/GCC/binutils, la gran cantidad de objetivos, algunas abstracciones de objetivos específicas específicas de EnC, y el "bueno tener" pero la "naturaleza no esencial" de EnC es la razón por la cual no ha aparecido aún en GDB/GCC.
Happy hacking!
(ps Es instructivo e inspirador ver lo que podría hacer el entorno de programación interactiva Smalltalk-80. En St80 no había concepto de "reinicio": la imagen y su memoria de objetos siempre estaban en vivo, si editaba cualquier aspecto de una clase que todavía tenía que seguir ejecutando. En tales entornos, el control de versiones de los objetos no era hipotético.)
Una respuesta real no es posible aquí, sería masiva llama y cebo downvote. Pruebe programmers.se y pregunte acerca de los roles de liderazgo en el mundo foss. –
Hans, sinceramente no entiendo su comentario. Creo que mi pregunta está bastante bien formada: es una pregunta específica sobre una popular cadena de herramientas y una conocida función de depurador; Me gustaría saber si existen obstáculos técnicos importantes que impidan a las personas implementar E & C en gcc/gdb y si ya se ha conocido algún trabajo para implementarlo. – Kos
Heh. Nunca uso E & C, pero igual encuentro Visual Studio mucho mejor que Eclipse o cualquier otro combo basado en GCC/GDB. Esto se debe totalmente a la estrecha integración entre el editor y el depurador, y prefiero la forma en que la interfaz es bastante liviana (a menos que elijas usar las funciones más pesadas). Ningún otro IDE es tan fácilmente utilizable o limpio interconectado en mi opinión. Como tal, uso VStudio para desarrollar WITH GCC y varias otras plataformas. – Goz