gdb implementó soporte para depuración inversa en 2009 (con gdb 7.0). Nunca lo escuché hasta 2012. Ahora lo encuentro extremadamente útil para ciertos tipos de problemas de depuración. Desearía haber oído hablar de eso antes.
Corrígeme si me equivoco, pero mi impresión es que la técnica todavía se usa raramente y la mayoría de la gente no sabe que existe. ¿Por qué?
¿Conoces alguna comunidad de programación donde el uso de depuración inversa sea común?
Información de antecedentes:
- Stackoverflow: ¿Cómo funciona la depuración inversa?
- gdb usa el término "depuración inversa" pero otros proveedores usan otros términos para técnicas idénticas o similares:
- Microsoft lo llama IntelliTrace o "Depuración histórica"
- Hay un depurador inverso de Java llamado Omniscient Debugger , aunque probablemente ya no funcione en Java 6
- Hay otros depuradores inversos de Java
- El depurador de OCaml (ocamldebug) lo llama viaje en el tiempo
Respuestas:
Por un lado, ejecutar en modo de depuración con grabación activada es muy costoso en comparación incluso con el modo de depuración normal; También consume mucha más memoria.
Es más fácil disminuir la granularidad del nivel de línea al nivel de llamada de función. Por ejemplo, el depurador estándar en eclipse le permite "soltar al marco", que es esencialmente un salto al inicio de la función con un reinicio de todos los parámetros (no se revierte nada en el montón y
finally
no se ejecutan los bloques , por lo que no es un verdadero depurador inverso; tenga cuidado con eso).Tenga en cuenta que esto ha estado disponible durante varios años y funciona de la mano con el reemplazo de código activo.
fuente
Como ya se mencionó, el rendimiento es clave, por ejemplo, con la depuración reversible de gdb, ejecutar algo como gzip ve una desaceleración de 50,000x en comparación con la ejecución nativa. Sin embargo, existen alternativas comerciales: trabajo para Undo undo.io , y nuestro producto UndoDB hace lo mismo pero con una desaceleración de menos de 2x. También hay otros depuradores reversibles comerciales disponibles.
fuente
rr
?Para obtener una descripción general de las opciones y productos tecnológicos, consulte una serie de publicaciones de blog que escribí hace un año (y algunos seguimientos desde entonces):
Creo que por qué se usa tan poco es que requiere un hardware especial, o usar un depurador especial, o configurar su sistema correctamente. Lamentablemente, la mayoría de las personas no invierten el tiempo para obtener el máximo valor de sus herramientas de depuración.
Y el hecho de que el "default barato" de gdb es casi inusualmente lento y tiene bastantes problemas de estabilidad para todo excepto los sistemas de destino más comunes.
fuente
Desde mi experiencia como ingeniero de ventas para el depurador TotalView, la gente sabe que existe pero no cree que funcione, independientemente de la desaceleración (aceptable o no).
La Universidad de Cambridge recientemente realizó una encuesta titulada "No adoptar los costos de depuración inversa de la economía global de $ 41 mil millones anuales" .
Y volviendo a GDB, he escuchado (mucho) que la desaceleración hace que sea bastante inutilizable en una aplicación de la "vida real".
Personalmente, me encantaría saber de más personas que utilizan la depuración inversa en aplicaciones que no sean "¡Hola, mundo!"
fuente
Creo que es importante ampliar un poco más esta depuración "inversa" o "histórica". Creo que comprender sistemas y comportamientos complejos en ellos, reproducir "eventos" que hacen explícito el estado es absolutamente crucial.
Lo que quiero expresar es que no está solo preguntándose por qué esta técnica no se aplica tanto hoy o por qué los problemas relacionados rara vez se discuten claramente.
Así que enfaticemos dos conceptos muy importantes aquí:
1. Para comprender un sistema de programación es útil hacer explícito el estado
2.Para comprender aún más un sistema de programación que reproduzca secuencias de estado (eventos) puede ayudar mucho.
Aquí hay algunas fuentes que abordaron el problema y propusieron o diseñaron soluciones para el problema (que trata el estado en sistemas complejos):
- Fuera del bit de alquitrán, papel: http://shaffner.us/cs/papers/tarpit.pdf Ideas principales: evitar, aislar o hacer explícito el estado
-CQRS http://www.cqrs.nu/ Esta es una combinación de dos conceptos: segmentación de consultas de comandos y aprovisionamiento de eventos. Existen diferentes implementaciones (Java, C #, Scala). La reproducción de secuencias de Tate y la evolución de un modelo de dominio son las partes cruciales aquí.
Si realmente alejas y ves la imagen muy amplia, ya puedes ver que con el "aumento" de la programación funcional, la gente ya está ((inconscientemente) atraída por fp porque hace que el estado sea explícito. Pero eso solo trata con el punto uno, para abordar el segundo necesita otro concepto que podría describirse "libremente" como programación funcional reactiva.
Entonces, podría decir todo bien, pero ¿quién usa realmente CQRS y FRP? Yo diría (IMO porque no tengo números concretos) en realidad muchas compañías es solo que no saben que el trabajo que hacen tiene esta terminología. Tal vez buscas un poco en Google y escuchas de empresas que usan CQRS, ya hay algunas historias de éxito. FRP también está aumentando lentamente como ejemplo que podría darle a Netflix: http://techblog.netflix.com/2013/02/rxjava-netflix-api.html que acaba de lanzar una implementación de RX que en realidad está basada en .NET (pero tiene una implementación de Javascript también). Entonces, la gente ya está usando estas técnicas hoy, EN GRANDE, para comprender sistemas complejos y mejorarlos aún más. Por eso utilizan técnicas de depuración inversa.
fuente