¿Por qué rara vez se usa la depuración inversa? [cerrado]


57

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:


47
Para el beneficio de aquellos que no saben que existe, ¿qué es la depuración inversa?
Mason Wheeler

55
MS llamó a su sistema intellitrace, que parece ser similar a lo que usted llama depuración revesada, podría ser una cuestión de múltiples nombres dependiendo del entorno, lo que parece menos utilizado.
Ryathal

1
Solo por lo que vale: es mucho más antiguo de lo que crees: Microsoft lo admitió en QuickC (alrededor de 1989 o '90, si la memoria funciona).
Jerry Coffin

41
@MasonWheeler, claramente la depuración inversa es el acto de agregar errores al código. No estoy de acuerdo con la premisa del OP de que esta es una práctica poco común.
Ben Lee

3
@BenLee, a eso lo llamamos rebugging.
OldFart

Respuestas:


27

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 finallyno 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.


1
Muy buena respuesta. Puedo confirmar que la grabación es costosa. Debe habilitarlo justo antes de ingresar a la parte crítica de su aplicación, lo que no siempre es trivial. También estoy de acuerdo en que "soltar al marco" suele ser lo suficientemente bueno. Sin embargo, no funciona bien con bucles o algoritmos recursivos.
Philipp Claßen

3
Eso es hasta rr ( rr-project.org ). La velocidad mientras se graba una ejecución usando rr es apenas más lenta. Luego puede reproducir, intervenir, rebobinar, configurar observadores en su IDE favorito ( github.com/mozilla/rr/wiki/Using-rr-in-an-IDE ) ... La forma en que depure su código nunca será mismo.
jyavenard

11

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.


1
Interesante, definitivamente lo intentaré. En varios artículos, se afirma que es gratuito para uso no comercial, pero no encontré información que lo confirme en su página de inicio. ¿Sigue siendo cierto? Gracias por revelar su afiliación.
Philipp Claßen

2
¿Cuáles son los precios de las versiones Starter y Professional de UndoDB? No los veo en la página de ediciones de UndoDB.
tcrosley

3
¿Cómo se comparan con los de Mozilla rr?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

10

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.


4

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!"


44
Creo que sería mucho mejor vincular este estudio en lugar del spam de 'Deshacer software' que pretende ser un estudio.
Bulwersator

1
En mi trabajo anterior, trabajé en la creación de un depurador inverso ( ghs.com/products/timemachine.html ). Utilizamos internamente el depurador, y puedo decirles que fue increíble. Por supuesto, fue genial en las condiciones de carrera realmente difíciles, pero fue más que eso. Cuando la depuración inversa está activada todo el tiempo, su mentalidad acerca de la depuración cambia. Usted itera menos y puede ser menos cuidadoso con la forma en que prueba su código. También puede guardar una ejecución y enviarla a alguien, por lo que es excelente para encontrar errores en el código de otras personas.
Speedplane

2

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.