gdb a mis en place un support pour le débogage inversé en 2009 (avec gdb 7.0). Je n'en ai jamais entendu parler avant 2012. Maintenant, je le trouve extrêmement utile pour certains types de problèmes de débogage. J'aurais aimé en avoir entendu parler auparavant.
Corrigez-moi si je me trompe, mais j’ai l’impression que la technique est encore rarement utilisée et que la plupart des gens ne savent pas qu’elle existe. Pourquoi?
Connaissez-vous des communautés de programmation où l'utilisation du débogage inversé est courante?
Informations d'arrière-plan:
- Stackoverflow: Comment fonctionne le débogage inversé?
- gdb utilise le terme "reverse debugging", mais d'autres fournisseurs utilisent d'autres termes pour des techniques identiques ou similaires:
- Microsoft l'appelle IntelliTrace ou "débogage historique"
- Il existe un débogueur inversé Java appelé Omniscient Debugger , même s'il ne fonctionne probablement plus en Java 6.
- Il existe d'autres débogueurs inverses Java
- Le débogueur d'OCaml (ocamldebug) appelle cela le voyage dans le temps
Réponses:
D'une part, fonctionner en mode débogage avec enregistrement est très coûteux par rapport au mode de débogage même normal; il consomme également beaucoup plus de mémoire.
Il est plus facile de diminuer la granularité du niveau de ligne au niveau d'appel de fonction. Par exemple, le débogueur standard dans eclipse vous permet de "passer à l’image", ce qui est essentiellement un retour au début de la fonction avec une réinitialisation de tous les paramètres (rien de fait sur le tas n'est annulé et les
finally
blocs ne sont pas exécutés). , ce n’est donc pas un vrai débogueur inversé (faites attention à cela).Notez que cette solution est disponible depuis plusieurs années et fonctionne de pair avec le remplacement du code à chaud.
la source
Comme mentionné précédemment, les performances sont essentielles, par exemple avec le débogage réversible de gdb. Si vous exécutez quelque chose comme gzip, vous constaterez un ralentissement de 50 000 fois par rapport à une exécution native. Il existe toutefois des alternatives commerciales: je travaille pour Undo undo.io et notre produit UndoDB fait de même, mais avec un ralentissement inférieur à 2x. Il existe également d'autres débogueurs réversibles commerciaux.
la source
rr
?Pour une vue d'ensemble des choix et produits technologiques, voir une série de billets de blog que j'ai écrits il y a environ un an (et quelques suivis depuis):
Mon sentiment que je l’utilise si peu, c’est que cela nécessite un matériel spécial, l’utilisation d’un débogueur spécial ou la configuration de votre système. La plupart des gens n'investissent malheureusement pas le temps nécessaire pour tirer le meilleur parti de leurs outils de débogage.
Et le fait que le "défaut par défaut" de gdb est presque exceptionnellement lent et pose quelques problèmes de stabilité pour tout sauf les systèmes cibles les plus courants.
la source
D'après mon expérience en tant qu'ingénieur commercial pour le débogueur TotalView, les utilisateurs savent qu'il existe mais ne pensent pas que cela fonctionne, quel que soit le ralentissement (acceptable ou non).
L’Université de Cambridge a récemment mené une enquête intitulée "L’échec à adopter des coûts de débogage inversé coûte 41 milliards de dollars par an à l’économie mondiale" .
Et pour revenir à GDB, j’ai souvent entendu dire que le ralentissement le rend tout à fait inutilisable avec une application "réelle".
Personnellement, j'aimerais beaucoup avoir plus de gens qui utilisent le débogage inverse sur des applications autres que "Hello world!"
la source
Je pense qu'il est important de développer un peu plus ce débogage "inverse" ou "historique". Je pense que pour comprendre les systèmes complexes et le comportement dans ceux-ci, il est absolument crucial de rejouer les "événements" qui rendent l'état explicite.
Ce que je veux dire, c'est que vous n'êtes pas seul à vous demander pourquoi cette technique n'est pas tellement appliquée aujourd'hui ou pourquoi les problèmes connexes sont rarement discutés clairement.
Soulignons donc ici deux concepts très importants:
1.Pour comprendre un système de programmation, il est utile de rendre explicite l'état
2.Pour comprendre encore plus, un système de programmation rejouant des séquences d’états (événements) peut beaucoup aider.
Voici quelques sources qui ont abordé le problème et proposé ou conçu des solutions au problème (traitement de l'état dans des systèmes complexes):
-Out of the bit bit, paper: http://shaffner.us/cs/papers/tarpit.pdf Idées principales: éviter, isoler ou rendre explicite l'état
-CQRS http://www.cqrs.nu/ C'est une combinaison de deux concepts: Ségrégation de requêtes de commandes et Sourcing d'événements. Il existe différentes implémentations (Java, C #, Scala). La répétition des séquences de Tate et l'évolution d'un modèle de domaine sont les éléments cruciaux de cette étape.
Si vous vraiment en zoom et de voir l'image très large , vous pouvez déjà voir que la « montée » des personnes de programmation fonctionnelle sont déjà ((un) consciemment) attirés par fp parce qu'il fait état explicite! Mais cela ne concerne que le premier point. Pour aborder le second, vous avez besoin d’un autre concept qui pourrait être décrit de manière "approximative" comme une programmation réactive fonctionnelle.
Vous pouvez donc dire que tout va bien, mais qui utilise réellement CQRS et FRP? Je dirais (OMI parce que je n'ai pas de chiffres concrets) en fait beaucoup d'entreprises, c'est juste qu'elles ne savent pas que leur travail utilise cette terminologie. Peut-être que vous google un peu et que vous entendez des entreprises qui utilisent CQRS, il y a déjà des histoires de réussite. Par exemple, le format FRP augmente lentement. Je pourrais donner à Netflix: http://techblog.netflix.com/2013/02/rxjava-netflix-api.html qui vient de publier une implémentation de RX qui est en réalité basée sur .NET (mais a une implémentation Javascript aussi). Donc, les gens utilisent déjà ces techniques aujourd'hui, dans le grand pour comprendre les systèmes complexes et les rendre encore meilleurs. C'est pourquoi ils utilisent des techniques de débogage inverse.
la source