{"id":1672,"date":"2023-04-14T08:34:45","date_gmt":"2023-04-14T06:34:45","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1672"},"modified":"2023-04-14T08:34:45","modified_gmt":"2023-04-14T06:34:45","slug":"devoxx-fr-2023-improving-your-skills-with-the-debugger-par-bouke-nijuis","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-improving-your-skills-with-the-debugger-par-bouke-nijuis\/","title":{"rendered":"Devoxx FR 2023 &#8211; Improving your skills with the Debugger par Bouke Nijuis"},"content":{"rendered":"<p>Deuxi\u00e8me conf\u00e9rence \u00e0 laquelle j&rsquo;assiste (et derni\u00e8re pour laquelle j&rsquo;ai pris des notes), \u00e7a parle de l&rsquo;utilisation du debugger.<\/p>\n<p>On va utiliser un programme simple de type Hello World.<\/p>\n<p>Apr\u00e8s un rapide rappel sur les bases de l&rsquo;utilisation d&rsquo;un debugger avec IntelliJ on entre dans le vif du sujet, les fonctionnalit\u00e9s avanc\u00e9es et parfois cach\u00e9es ! Certaines de ces fonctionnalit\u00e9s n\u00e9cessitent de lancer des commandes dans IntelliJ car il n&rsquo;y a pas de bouton ni d&rsquo;entr\u00e9e dans le menu pour elles, le raccourcit SHIFT-SHIFT permet entre autre de chercher des commandes.<\/p>\n<p>Commen\u00e7ont par le <strong>breakpoint<\/strong> :<\/p>\n<ul><li>Au clic droit: enable\/disable, suspend all ou seulement le thread en cours, ajout de condition<\/li>\n\n<li>Conditional breakpoint: une condition en Java qui doit \u00eatre vrai pour que le breakpoint soit actif. Utile quand un breakpoint sera \u00e9valu\u00e9 souvent mais qu&rsquo;on n&rsquo;est int\u00e9ress\u00e9 que par certaines ex\u00e9cutions<\/li>\n\n<li>More =&gt; beaucoup plus de capacit\u00e9. Evaluate and log : permet de loguer automatiquement au breakpoint et \u00e9vite le sysout debugging avec le risque d&rsquo;oublier de les retirer ensuite. Utile avec un breakpoint de type non-suspending. Il est possible de le faire automatiquement en s\u00e9lectionnant une variable et SHIFT-CLICK<\/li>\n\n<li>Le Drag and Dropd&rsquo;un breakpoint est possible ! <\/li>\n\n<li>Il eexiste une commande Restore Breakpoint au cas o\u00f9 il aurait \u00e9t\u00e9 supprim\u00e9 par erreur<\/li>\n<\/ul>\n<p><strong>Stepping<\/strong> :<\/p>\n<ul><li>Force step over : ignore les breakpoints entre la ligne en cours et la suivante (CTRL-F8)<\/li>\n\n<li>Force step into : par d\u00e9faut step into ne va que dans nos m\u00e9thodes et pas dans les m\u00e9thodes du code third party, force step into va y aller<\/li>\n\n<li>Smart step into : s&rsquo;active quand il y a plusieurs m\u00e9thodes \u00e0 une m\u00eame ligne et permet de selectionner la m\u00e9thode dans laquelle aller<\/li>\n\n<li>Dropping Frames (ic\u00f4ne sur la frame): permet de supprimer une frame et de \u00ab\u00a0retourner\u00a0\u00bb \u00e0 la pr\u00e9c\u00e9dente =&gt; retour dans le temps ! Attention, uniquement dans le contexte de la JVM<\/li>\n<\/ul>\n<p><strong>Evaluating expression<\/strong> :<\/p>\n<ul><li>Quick expression : l&rsquo;expression est surlign\u00e9e et on peut la cliquer, pas de modification possible<\/li>\n\n<li>Evaluation expression : on s\u00e9lectionne l&rsquo;expression, on peut ensuite la modifier =&gt; attention la modification de variable est possible !<\/li>\n<\/ul>\n<p><strong>Stream debugger <\/strong>: quand intelliJ d\u00e9tecte un breakpoint sur une Stream, un bouton apparait (\u00e0 droite) qui permet de debugger chaque \u00e9tape de la stream !<\/p>\n<p>A un breakpoint, il est possible de changer le code puis d&rsquo;ex\u00e9cuter la commande \u00ab\u00a0Reload changed class\u00a0\u00bb : ne marche que pour changer le code dans une m\u00e9thode \/ une frame diff\u00e9rente. Dropping frames permet de supprimer la frame dans laquelle on a chang\u00e9 le code et \u00e7a va marcher !<\/p>\n<p><strong>Remote debugging<\/strong> :<\/p>\n<ul><li>Edit configuration -&gt; Remote JVM Debug -&gt; contient des options lignes de commandes \u00e0 ajouter \u00e0 la commande Java pour que le programme \u00e9coute la connexion d&rsquo;une JVM. Ajouter suspend=y pour que le programme attende une connexion au d\u00e9marrage.<\/li>\n\n<li>Lancer la run config va lancer un debugger qui va s&rsquo;attacher au programme qui attend et voila !<\/li>\n\n<li>Drop frames et reload current class marchent !<\/li>\n<\/ul>\n<p>En allant \u00e0 cette session j&rsquo;avais peur de ne rien apprendre, mais en fait j&rsquo;ai appris plein de choses que je ne connaissais pas et me suit aper\u00e7u que je sous-utilisais les capacit\u00e9s du debugger. Et maintenant je sais \u00e0 quoi servent tous les boutons et les ic\u00f4nes du debugger d&rsquo;IntelliJ !<\/p>","protected":false},"excerpt":{"rendered":"<p>Deuxi\u00e8me conf\u00e9rence \u00e0 laquelle j&rsquo;assiste (et derni\u00e8re pour laquelle j&rsquo;ai pris des notes), \u00e7a parle de l&rsquo;utilisation du debugger. On va utiliser un programme simple de type Hello World. Apr\u00e8s un rapide rappel sur les bases de l&rsquo;utilisation d&rsquo;un debugger avec IntelliJ on entre dans le vif du sujet, les fonctionnalit\u00e9s avanc\u00e9es et parfois cach\u00e9es ! Certaines de ces fonctionnalit\u00e9s n\u00e9cessitent de lancer des commandes dans IntelliJ car il n&rsquo;y a pas de bouton ni d&rsquo;entr\u00e9e dans le menu pour&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-improving-your-skills-with-the-debugger-par-bouke-nijuis\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[215,11],"class_list":["post-1672","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-debug","tag-java"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1267,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/debugger-une-image-native-graalvm-avec-gdb\/","url_meta":{"origin":1672,"position":0},"title":"Debugger une image native GraalVM avec GDB","author":"admin","date":"lundi 14 juin 2021","format":false,"excerpt":"Dans un pr\u00e9c\u00e9dent article, j'avais \u00e9voqu\u00e9 comment profiler une image native GraalVM avec perf. Si vous ne connaissez pas l'outil GraalVM et les limitations qu'il apporte, je vous conseille de relire mon article, ou tout du moins son d\u00e9but. Comme vu dans mon article pr\u00e9c\u00e9dent, une image native va contenir\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1674,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-foundation-db-le-secret-le-mieux-garde-des-nouvelles-architectures-distribuees-par-pierre-zemb-et-steven-le-roux\/","url_meta":{"origin":1672,"position":1},"title":"Devoxx FR 2023 &#8211; FoundationDB : le secret le mieux gard\u00e9 des nouvelles architectures distribu\u00e9es ! par Pierre Zemb et Steven Le Roux","author":"admin","date":"lundi 17 avril 2023","format":false,"excerpt":"Il existe pr\u00e8s de 900 BDD (cf https:\/\/dbdb.io\/) et chacune a ses particularit\u00e9s : mod\u00e8le de requ\u00eatage, mod\u00e9lisation de la donn\u00e9e, moteur de stockage, .... Existe-t-il une de ces trois caract\u00e9ristiques que l'on peut mutualiser ? Oui, toutes les bases de donn\u00e9es stockent de la donn\u00e9e, on doit donc pouvoir\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":712,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/demarrage-jvm-8-vs-9\/","url_meta":{"origin":1672,"position":2},"title":"D\u00e9marrage JVM 8 vs 9","author":"admin","date":"jeudi 31 ao\u00fbt 2017","format":false,"excerpt":"Introduction En parcourant la mailing liste d'open JDK (core-lib-dev) j'ai vu plusieurs threads de mail \u00e0 propos d'optimisation de temps de d\u00e9marrage et d'occupation m\u00e9moire d'une JVM \"minimale\". Ce travail a \u00e9t\u00e9 r\u00e9alis\u00e9 en grande partie par Claes Redestad (Oracle) lors du d\u00e9veloppement de Java 9. J'ai donc d\u00e9cid\u00e9 de\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1877,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-24-quoi-de-neuf\/","url_meta":{"origin":1672,"position":3},"title":"Java 24 : quoi de neuf ?","author":"admin","date":"vendredi 10 janvier 2025","format":false,"excerpt":"Maintenant que Java 24 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":68,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/friendly-url\/","url_meta":{"origin":1672,"position":4},"title":"Friendly URL","author":"admin","date":"lundi 11 f\u00e9vrier 2008","format":false,"excerpt":"Dans cet article, je vais vous parler des Friendly URL et vous donner un exemple d'impl\u00e9mentation en Java\/J2EE. D'autres technologie permettent facilement de mettre en place ce type de fonctionnalit\u00e9. On peut parler de user-friendly ou de search-engine-friendly URL. Pour ma part, une bonne Friendly URL est pour les deux!\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1668,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-hidden-security-features-of-th-jvm-everything-you-didnt-know-and-more-par-steve-poole\/","url_meta":{"origin":1672,"position":5},"title":"Devoxx FR 2023 &#8211; Hidden security features of the JVM &#8211; everything you didn&rsquo;t know and more par Steve Poole","author":"admin","date":"vendredi 14 avril 2023","format":false,"excerpt":"Premi\u00e8re conf\u00e9rence \u00e0 laquelle je vais pour cette session de Devoxx France parle de s\u00e9curit\u00e9 dans le JVM par Steve Poole. Le Security Manager est d\u00e9pr\u00e9ci\u00e9 mais la JVM a un design fantastique pour la s\u00e9curit\u00e9. Tout d'abord, pourquoi se soucier de la s\u00e9curit\u00e9 ? Premi\u00e8re conf\u00e9rence \u00e0 laquelle je\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=1672"}],"version-history":[{"count":1,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1672\/revisions"}],"predecessor-version":[{"id":1673,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1672\/revisions\/1673"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}