本文主要介绍“如何使用智能远程调试Linux的Java程序”。在日常操作中,相信很多人对于如何使用IntelliIdea远程调试Linux的Java程序都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“如何使用IntelliIdea远程调试Linux的Java程序”的疑惑!接下来,请和边肖一起学习!
00-1010我们先来看看在IntelliJ IDEA中直接调试是什么感觉。
首先准备一个简单的Java程序:
package com . pkslow . basic;
import Java . util . map;
publicclassRemoteDebug{
publicationstativitmain(String[]args){ 0
system . out . println('-start-');
system . out . println(' getallthesystemenvironment ');
MapString,Stringvs=system . getenv();
system . out . println(' \ nprint outthecontains ` home ` ');
system . out . println('-EnvHome-');
envs.entrySet()。流()。过滤器(env-env.getKey()。包含(' HOME ')。forEach(env-{ 0
system . out . println(env . GetKey()' : ' env . GetVaLue());
});
system . out . println('-end-');
}
}功能很简单。获取所有系统环境变量并打印出带有HOME字段的。
调试很简单,只需点击以下按钮:
相信大家都知道这一点,但很多人应该不会注意到。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
程序,可以利用它进行调试、热部署等。
2 调试本地程序
我们先试试如何可以调试本地程序,不是直接在IDEA
上调试。先要编译出class
文件RemoteDebug.class
,然后按package
结构放好。我通过mvn clean compile
来编译。
启动程序,在target/classes/
目录执行:
$ 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
然后程序就会等待调试客户端的连接,不会往下执行。
配置IDEA
以进行调试:
配置完成保存后,点击debug
就可以了:
程序已经进入debug
模式:
我们已经执行到了其中一行,现在看看服务端:
与IDEA
是同步的,并且确实已经控制了服务端Java
的执行。
3 远程调试Linux Java程序
先把程序部署在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
,正常控制了远程服务端的Java
:
服务端的实时执行情况:
让程序执行完如下:
$ 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程序怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/126281.html