{"id":206,"date":"2024-02-13T23:52:31","date_gmt":"2024-02-13T22:52:31","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=206"},"modified":"2024-02-19T23:56:06","modified_gmt":"2024-02-19T22:56:06","slug":"remote-debugging-von-jvm-anwendungen","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=206","title":{"rendered":"Remote-Debugging von JVM-Anwendungen"},"content":{"rendered":"\n<p>Die Java Virtual Machine (JVM) ist die Basis f\u00fcr die Ausf\u00fchrung von Java-Anwendungen und bietet zahlreiche Funktionen zur Fehlerbehebung und Analyse von Anwendungen. Eine leistungsstarke Methode zur Fehlerbehebung ist das Remote-Debugging, bei dem Entwickler ihre Anwendungen w\u00e4hrend der Ausf\u00fchrung \u00fcberwachen und debuggen k\u00f6nnen. In diesem Artikel werden wir uns darauf konzentrieren, wie man eine JVM-Anwendung mit Remote-Debugging startet und dabei insbesondere das Kommandozeilentool JDB f\u00fcr das Remote-Debugging verwendet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grundlagen des Remote-Debuggings<\/h2>\n\n\n\n<p>Remote-Debugging erm\u00f6glicht es Entwicklern, ihre Anwendungen von einer entfernten Maschine aus zu \u00fcberwachen und zu debuggen. Dies ist besonders n\u00fctzlich, wenn die Anwendung auf einem entfernten Server oder in einer anderen Umgebung l\u00e4uft, die nicht direkt zug\u00e4nglich ist. Die JVM bietet Unterst\u00fctzung f\u00fcr Remote-Debugging \u00fcber die Java Debug Wire Protocol (JDWP).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vorbereitung der JVM-Anwendung<\/h2>\n\n\n\n<p>Bevor Sie mit dem Remote-Debugging beginnen k\u00f6nnen, m\u00fcssen Sie sicherstellen, dass Ihre JVM-Anwendung f\u00fcr das Debugging konfiguriert ist. Dazu m\u00fcssen Sie beim Start der Anwendung spezielle JVM-Argumente festlegen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">port<\/span>&gt;<\/span> -jar your-application.jar<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hierbei gibt <code>&lt;port&gt;<\/code> den Port an, auf dem die JVM auf eingehende Debugger-Verbindungen warten soll. Durch die Verwendung von <code>suspend=n<\/code> wird vermieden, dass die Anwendung bei Start auf einen Debugger wartet und stattdessen sofort ausgef\u00fchrt wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Remote-Debugging mit der IDE<\/h2>\n\n\n\n<p>Die meisten integrierten Entwicklungsumgebungen (IDEs) unterst\u00fctzen Remote-Debugging von JVM-Anwendungen. Hier ist eine exemplarische Anleitung f\u00fcr IntelliJ IDEA:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u00d6ffnen Sie Ihr Projekt in IntelliJ IDEA.<\/li>\n\n\n\n<li>Erstellen Sie eine neue Konfiguration f\u00fcr das Remote-Debugging.<\/li>\n\n\n\n<li>Legen Sie die Host- und Portinformationen fest, die mit den JVM-Argumenten Ihrer Anwendung \u00fcbereinstimmen.<\/li>\n\n\n\n<li>Starten Sie die Remote-Debugging-Konfiguration.<\/li>\n<\/ol>\n\n\n\n<p>IntelliJ IDEA stellt eine Verbindung zur entfernten JVM-Anwendung her, und Sie k\u00f6nnen den Debugger wie gewohnt verwenden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Remote-Debugging mit JDB<\/h2>\n\n\n\n<p>Das Java Debugger (JDB) ist ein leistungsf\u00e4higes Kommandozeilentool f\u00fcr das Debugging von Java-Anwendungen. Es unterst\u00fctzt auch Remote-Debugging \u00fcber JDWP. Hier sind die Schritte f\u00fcr das Remote-Debugging mit JDB:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Starten Sie die JVM-Anwendung f\u00fcr das Remote-Debugging:<\/strong><\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">   java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">port<\/span>&gt;<\/span> -jar your-application.jar<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>Starten Sie JDB mit der Verbindung zur entfernten JVM:<\/strong><\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">   jdb -attach <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">hostname<\/span>&gt;<\/span>:<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">port<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ersetzen Sie <code>&lt;hostname&gt;<\/code> durch den Hostnamen oder die IP-Adresse der Maschine, auf der die JVM-Anwendung ausgef\u00fchrt wird, und <code>&lt;port&gt;<\/code> durch den festgelegten Debugging-Port.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li><strong>Setzen Sie Breakpoints und starten Sie den Debugger:<\/strong><\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">   <span class=\"hljs-selector-tag\">stop<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">your<\/span><span class=\"hljs-selector-class\">.package<\/span><span class=\"hljs-selector-class\">.YourClass<\/span><span class=\"hljs-selector-class\">.yourMethod<\/span>\n   <span class=\"hljs-selector-tag\">run<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hierbei sollte <code>your.package.YourClass.yourMethod<\/code> durch den Klassen- und Methodennamen ersetzt werden, an dem Sie den Debugger anhalten m\u00f6chten.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li><strong>Verwenden Sie JDB-Debugger-Befehle:<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>step<\/code> &#8211; Einzelschritt-Debugging.<\/li>\n\n\n\n<li><code>cont<\/code> &#8211; Fortsetzen der Ausf\u00fchrung bis zum n\u00e4chsten Breakpoint.<\/li>\n\n\n\n<li><code>locals<\/code> &#8211; Anzeigen von lokalen Variablen.<\/li>\n<\/ul>\n\n\n\n<p>Das Remote-Debugging mit JDB erm\u00f6glicht es Entwicklern, ohne eine IDE direkt auf der Kommandozeile zu debuggen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Remote-Debugging ist ein entscheidendes Werkzeug f\u00fcr die Fehlerbehebung von Java-Anwendungen, die in entfernten Umgebungen ausgef\u00fchrt werden. Die Java Virtual Machine bietet eine solide Unterst\u00fctzung f\u00fcr Remote-Debugging \u00fcber JDWP, und Entwickler k\u00f6nnen zwischen IDEs oder Kommandozeilentools wie JDB w\u00e4hlen, um ihre Anwendungen zu \u00fcberwachen und zu debuggen. Durch die sorgf\u00e4ltige Konfiguration der JVM-Argumente und die Nutzung der richtigen Tools k\u00f6nnen Entwickler effektiv Fehler beheben und die Leistung ihrer Anwendungen optimieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Java Virtual Machine (JVM) ist die Basis f\u00fcr die Ausf\u00fchrung von Java-Anwendungen und bietet zahlreiche Funktionen zur Fehlerbehebung und Analyse von Anwendungen. Eine leistungsstarke Methode zur Fehlerbehebung ist das Remote-Debugging, bei dem Entwickler ihre Anwendungen w\u00e4hrend der Ausf\u00fchrung \u00fcberwachen und debuggen k\u00f6nnen. In diesem Artikel werden wir uns darauf konzentrieren, wie man eine JVM-Anwendung [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-206","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=206"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/206\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/206\/revisions\/207"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}