Pregunta

Sé que E & C es un tema controvertido y algunos dicen que alienta un enfoque equivocado para la depuración, pero todavía - Creo que estamos de acuerdo en que hay numerosos casos en que es una clara utilidad - experimentar con diferentes valores de algunas constantes, el rediseño de los parámetros de interfaz gráfica de usuario en la marcha para encontrar un buen aspecto ... lo que sea.

Mi pregunta es:? ¿Alguna vez vamos a tener E & C en GDB Yo entiendo que es una característica específica de la plataforma y necesita una seria cooperación con el compilador, el depurador y el sistema operativo (MSVC tiene esta fácil ya que el compilador y depurador siempre vienen en un solo paquete) , pero ... todavía debe ser factible. Incluso he oído algo acerca de Apple tenerlo implementado en su versión de GCC [cita requerida] . Y yo diría que es de hecho factible.

Saber todo el bombo sobre E & C (mi experiencia dice que es el primero que los usuarios de MSVC mencionan cuando se le preguntó "¿por qué no cambiar a Eclipse y gcc / gdb" ), estoy seriamente sorprendió que después de MSVC bastantes años GCC / GDB todavía no tiene tal característica. ¿Hay buenas razones para que? ¿Alguien está trabajando en él mientras hablamos?

¿Fue útil?

Solución

Es una cantidad sorprendentemente no trivial de trabajo, que abarca muchas decisiones de diseño y las compensaciones de características. Tenga en cuenta: que se está depurando. El depurando un programa que está suspendido. Su imagen en la memoria contiene el código objeto de la fuente, y la distribución binaria de los objetos, el montón, las pilas. El depurador está inspeccionando su imagen de memoria. Tiene información de depuración cargado sobre los símbolos, tipos, asignaciones de dirección, PC (ip) a las correspondencias de origen. Se muestra la pila de llamadas, los valores de datos.

Ahora vamos a permitir que un conjunto particular de posibles cambios en el código y / o datos, sin detener el depurador y reiniciar. El más simple podría ser cambiar una línea de código a otro. Tal vez que vuelva a compilar el archivo o simplemente que la función o simplemente esa línea. Ahora usted tiene que parchear la imagen depurador para ejecutar esa nueva línea de código la próxima vez que paso por encima o no ejecuta a través de él. ¿Cómo funciona bajo el capó? ¿Qué ocurre 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? Tal vez sólo se puede hacer esto en un compilado especialmente para la depuración de destino EnC. Tal vez va a limitar posibles sitios es legal EnC. Considere lo siguiente: ¿qué ocurre si se edita una línea de código en una función suspendida en la pila de llamadas. Cuando el código devuelve no lo hace correr la versión original de la función o la versión con su línea cambiado? Si la versión original, ¿de dónde viene esa fuente viene?

locales

¿Se puede añadir o eliminar? ¿Qué hacer para que la pila de llamadas de marcos suspendidos? De la función actual?

Se puede cambiar firmas de función? Añadir campos a los campos / Remover de objetos? ¿Qué hay de las instancias existentes? ¿Qué pasa con pendientes destructorsu finalizadores? Etc.

Hay muchos, muchos detalles de funcionalidad que atender para hacer cualquier tipo de trabajo que se pudiese utilizar EnC. A continuación, hay muchos problemas de integración-tools transversales necesarias para proporcionar la infraestructura necesaria para poder EnC. En particular, esto ayuda a tener algún tipo de repositorio de información de depuración que puede poner a disposición del antes y después de editar la información de depuración y el código objeto para el depurador. Para C ++, la información de depuración de forma incremental actualizable en PDBs ayuda. la vinculación incremental puede ayudar también.

Mirando desde la MS ecosistemas durante los últimos en el ecosistema GCC, es fácil imaginar los problemas de complejidad y de integración a través del BGF / GCC / binutils, la gran cantidad de objetivos, algunos necesarios Enc específicos abstracciones de destino, y el "bueno tener, pero inesencial naturaleza" de EnC, son por eso no ha aparecido todavía en GDB / GCC.

Happy Hacking!

(ps Es instructivo e inspirar a mirar lo que el entorno de programación interactiva Smalltalk-80 podría hacer en ST80 no existía el concepto de "reinicio" -. La imagen y su memoria eran objeto siempre vivo, si editó cualquier aspecto de una clase que todavía tenía que seguir funcionando. En este tipo de entornos de versiones del objeto no era un hipotético.)

Otros consejos

No estoy familiarizado con MSVC de E & C, pero BGF tiene algunas de las cosas que has mencionado:

http://sourceware.org/gdb/current/onlinedocs /gdb/Altering.html#Altering

  

17. La alteración de ejecución

     

Una vez que cree que ha encontrado un error en su programa, es posible que desee saber con certeza si la corrección del error aparente conduciría a resultados correctos en el resto de la carrera. Puede encontrar la respuesta por medio de experimentos, usando las características del BGF para alterar la ejecución del programa.

     

Por ejemplo, puede almacenar nuevos valores en variables o posiciones de memoria, dar a su programa una señal, se reinicia en una dirección diferente, o incluso volver prematuramente de una función.

     

Asignación : La asignación a las variables
   Salto : Continuando en una dirección diferente
   Señalización : Dar a su programa una señal
   Volviendo : Al regresar de una función
   Llamar a : las funciones de llamada del programa
   Parches : parchear el programa
   Compilación y Código Inyectar : La compilación y el código de la inyección en GDB

Esta es una muy buena referencia a la antigua aplicación de Apple de "solución y continuar". También hace referencia a otras implementaciones de trabajo.

http://sources.redhat.com/ml/gdb/ 2003-06 / msg00500.html

Aquí hay un fragmento:

  

Fix y continuar es una característica implementada por muchos otros depuradores,   lo que hemos añadido a nuestra GDB para esta versión. Sun Workshop, SGI Prodev   WorkShop, de Microsoft Visual Studio, wdb de HP y Sun Java HotSpot   VM toda proporcionar esta función de una manera u otra. Yo no será en   aplicación de la corrección de HP WDB y Continúe característica, que se   agregado hace unos años. Aunque mi implementación final sigue el   líneas generales del enfoque que tomaron, no hay casi ninguna compartidos   código entre ellos. Algo de esto es debido a la architectual   diferencias (tanto el procesador y el ABI), pero aún más de que es   debido a las diferencias en el diseño de implementación.

Tenga en cuenta que esta capacidad puede haber sido eliminado en una versión posterior de su cadena de herramientas.

UPDATE: Dic-21-2012 Hay una BGF Hoja de Ruta presentación en PDF que incluye una diapositiva la descripción de "Fix and Continue", entre otros puntos de la bala. La presentación está fechada en julio-9-2012 así que tal vez hay esperanza para agregar esto en algún momento. La presentación fue parte de la herramientas GNU Caldero 2012 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top