這篇文章主要介紹“IntelliJ IDEA遠程Debug Linux的Java程序怎么使用”,在日常操作中,相信很多人在IntelliJ IDEA遠程Debug Linux的Java程序怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”IntelliJ IDEA遠程Debug Linux的Java程序怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
站在用戶的角度思考問題,與客戶深入溝通,找到三沙網站設計與三沙網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站建設、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、域名注冊、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋三沙地區(qū)。
我們先來看一下在IntelliJ IDEA
直接debug
是怎樣的。
先準備一個簡單的Java
程序:
package com.pkslow.basic; import java.util.Map; public class RemoteDebug { public static void main(String[] args) { System.out.println("------------------start------------------"); System.out.println("get all the system environment"); Mapenvs = System.getenv(); System.out.println("\nprint out the contains `HOME`"); System.out.println("------env HOME------"); envs.entrySet().stream() .filter(env -> env.getKey().contains("HOME")) .forEach(env -> { System.out.println(env.getKey() + ":" + env.getValue()); }); System.out.println("------------------end------------------"); } }
功能很簡單,獲取所有系統(tǒng)環(huán)境變量,并打印出含有HOME
字段的。
Debug
很簡單,直接點擊以下按鈕就可以:
相信大家都知道這一點,但應該很多人都不會注意,IDEA
究竟做了什么,為什么就可以調試了呢?我們看一下控制臺的日志就明白了:
/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59313,suspend=y,server=n -javaagent:/Users/pkslow/Library/Caches/IntelliJIdea2019.3/captureAgent/debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home/jre/lib/charsets.jar:" com.pkslow.basic.RemoteDebug Connected to the target VM, address: '127.0.0.1:59313', transport: 'socket'
簡化一下,不重要的參數去掉:
java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59313,suspend=y,server=n com.pkslow.basic.RemoteDebug
這就是可以Debug
的原因,利用了Java Agent
原理。這個功能很強大,類似一個AOP
,代理了Java
程序,可以利用它進行調試、熱部署等。
我們先試試如何可以調試本地程序,不是直接在IDEA
上調試。先要編譯出class
文件RemoteDebug.class
,然后按package
結構放好。我通過mvn clean compile
來編譯。
啟動程序,在target/classes/
目錄執(zhí)行:
$ java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50050,suspend=y,server=y com.pkslow.basic.RemoteDebug Listening for transport dt_socket at address: 50050
然后程序就會等待調試客戶端的連接,不會往下執(zhí)行。
配置IDEA
以進行調試:
配置完成保存后,點擊debug
就可以了:
程序已經進入debug
模式:
我們已經執(zhí)行到了其中一行,現在看看服務端:
與IDEA
是同步的,并且確實已經控制了服務端Java
的執(zhí)行。
先把程序部署在Linux
上:
$ scp -P 22 ./com/pkslow/basic/RemoteDebug.class root@xxx.xx.xx.xxx:/root/remoteDebug/com/pkslow/basic/ RemoteDebug.class 100% 2572 282.5KB/s 00:00
通過以下命令在服務端啟動程序,這里調試端口改為9999
,因為部分端口在遠程服務器并沒有開啟:
java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.pkslow.basic.RemoteDebug
本地電腦IDEA
配置如下:
開始debug
,正??刂屏诉h程服務端的Java
:
服務端的實時執(zhí)行情況:
讓程序執(zhí)行完如下:
$ java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.pkslow.basic.RemoteDebug Listening for transport dt_socket at address: 9999 ------------------start------------------ get all the system environment print out the contains `HOME` ------env HOME------ JAVA_HOME:/root/jdk1.8.0_131 HOME:/root ------------------end------------------
到此,關于“IntelliJ IDEA遠程Debug Linux的Java程序怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當前名稱:IntelliJIDEA遠程DebugLinux的Java程序怎么使用
轉載源于:http://weahome.cn/article/gpodsg.html