LiveRecorder pour Java est une nouvelle application pour rejouer des défaillances logicielles. Il permet aux développeurs d'enregistrer les défaillances d'application, puis de les rejouer dans IntelliJ pour trouver la cause de la défaillance. Cela permet de réduire le temps de débogage, en particulier en cas de défaillances intermittentes.
L'application LiveRecorder enregistre toutes les étapes d'exécution du code de l'application. Sous le capot, cela signifie que les instructions au niveau de la machine X86 sont enregistrées. L'enregistrement peut être rejoué, ce qui est assez similaire au débogage sauf qu'il fonctionne sur un enregistrement plutôt que sur une application en direct. Ceci est particulièrement utile pour le débogage des défaillances intermittentes qui ne se produisent que sporadiquement. Par exemple, lorsqu'une exception se produit parce que plusieurs threads accèdent à la même ressource. Le débogage des défaillances intermittentes sur une application en direct est assez difficile car vous ne savez jamais quand ils se produisent. Avec LiveRecorder, un enregistrement d'une défaillance est effectué, puis il peut être débogué à l'aide de la fonctionnalité de relecture.
LiveRecorder peut être utilisé pour enregistrer les défaillances d'application dans n'importe quel environnement. Cependant, l'enregistrement entraîne un ralentissement de 2 à 5 fois pour la plupart des programmes. L'équipe travaille à l'amélioration des performances; en attendant, il vaut probablement mieux éviter de l'exécuter en production. Il est également possible d'enregistrer les défaillances dans les tests; Des intégrations pour les outils de build sont disponibles. Cela permet d'exécuter LiveRecorder dans le cadre d'un pipeline de livraison continue avec, par exemple, Jenkins.
Le processus est divisé en trois parties : créer un enregistrement, rejouer, et déboguer dans IntelliJ. Les applications d'enregistrement et de relecture doivent s'exécuter sous Linux, IntelliJ peut s'exécuter sur n'importe quelle plate-forme.
Un agent est utilisé pour enregistrer les instructions de l'application :
-XX:-Inline -XX:TieredStopAtLevel=1 -XX:UseAVX=2 -Dsun.zip.disableMemoryMapping=true -agentpath:/path/to/lr4j-record-1.0.so=save_on=always
Il existe diverses options de configuration disponibles, par exemple, pour configurer le nom du fichier de l'enregistrement.
Après cela, l'application replay est utilisée pour relire l'enregistrement :
/path/to/lr4j/lr4j_replay -i /path/to/recording.undo -cp classpath
Then the IntelliJ plugin can be used to connect to the replay application. After successfully connecting, it's time to debug the application. The most prominent addition of the IntelliJ plugin is the 'Application Timeline':
Ensuite, le plugin IntelliJ peut être utilisé pour se connecter à l'application replay. Une fois la connexion établie, il est temps de déboguer l'application. L'ajout le plus important du plugin IntelliJ est l' "Application Timeline" :
InfoQ a contacté le vice-président du produit Jonathan Harris pour se plonger un peu plus dans LiveRecorder et avoir un aperçu de son avenir.
InfoQ : Pouvez-vous nous en dire un peu plus sur vous-même ? Quel est votre rôle chez Undo et à quoi ressemble votre journée ?
Jonathan Harris : Je suis le vice-président des produits chez Undo et j'ai plus de 20 ans d'expérience dans l'industrie du logiciel dans des rôles de développement et de marketing; y compris en tant que développeur chez Acorn et Psion, directeur de l'ingénierie et chef de produit chez Symbian Ltd, et directeur technique et stratège produit chez Tizen Association.
Ma journée consiste principalement à m'assurer qu'Undo est aligné sur toutes les unités commerciales et correctement équipé pour fournir à nos clients des produits de pointe qui offrent une expérience utilisateur de rêve.
InfoQ : LiveRecorder pour Java a été récemment lancé. Offre-t-il les mêmes fonctionnalités que les autres LiveRecorders ?
Jonathan Harris : LiveRecorder prend en charge les langages de programmation Java, C/C++ et Go, et permet aux développeurs d'enregistrer systématiquement les défaillances logicielles, de rejouer l'enregistrement pour analyser l'historique d'exécution et résoudre rapidement les bugs.
Les autres avantages de LiveRecorder pour Java sont les suivants :
Un enregistrement fournit un cas de test reproductible à 100% d'une défaillance logicielle qui est prêt pour l'analyse et le débogage.Un enregistrement est portable pour un partage facile des enregistrements entre les membres de l'équipe afin d'accélérer le MTTR.
Un puissant débogueur réversible intégré.
Rejouez les enregistrements en avant et en arrière pour trouver facilement la cause première des défauts.
LiveRecorder s'intègre parfaitement à IntelliJ IDEA et au flux de travail des développeurs.
InfoQ : Quelle était la raison de prendre en charge Java au lieu d'un autre langage de programmation ?
Jonathan Harris : Java a fêté ses 25 ans cette année et s'est régulièrement classé parmi les trois premiers choix de programmation pour les développeurs. Et si l'innovation dans l'espace a certainement progressé au cours de cette période, la complexité de ses défaillances logicielles a également progressé.
LiveRecorder est le produit phare de la société, mais jusqu'à cette version Java, il ne prenait en charge que les applications C/C ++ et Go. De toute évidence, le C ++ est un grand marché, mais c'est relativement une niche. Java est un marché beaucoup plus vaste et nous sommes très heureux de proposer une offre essentielle dans cet espace.
InfoQ : Pouvez-vous décrire le plus grand défi que vous avez rencontré lors de la création de la version Java ?
Jonathan Harris : L'enregistrement dans la JVM exécutant le code compilé par le JIT HotSpot et l'affichage des lignes sources Java lors du débogage.
InfoQ : Avez-vous des projets pour d'autres langages de programmation (JVM) tels que Kotlin ?
Jonathan Harris : En théorie, tout code qui s'exécute sur la JVM peut être débogué dans l'outil, y compris Java, Kotlin, Clojure, Scala et Jython. Kotlin est le prochain langage que nous avons l'intention de soutenir officiellement. Alors que l'outil prenait auparavant en charge C, C++ et Go, la JVM ajoute des dizaines de langages potentiels. En raison de son intégration profonde avec le noyau Linux, la technologie Undo se concentre aujourd'hui sur la machine virtuelle Java fonctionnant sur des serveurs.
InfoQ : Sur quelles fonctionnalités travaillez-vous pour la ou les prochaines versions ?
Jonathan Harris : Prise en charge de Visual Studio Code - mise au point continue sur l'amélioration du DevX (expérience des développeurs) et l'ajout de la prise en charge de cette plate-forme de développement toujours populaire.
Support de Kotlin - et peut-être Scala mais Kotlin semble avoir plus d'engouement.
Débogage réversible en direct - pouvoir exécuter une application en direct et effectuer un débogage inversé serait pratique.