服务端:
普通的jar项目
jdk1.7之后使用命令:
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar test-remove-debug.jar
jdwp:是 Java Debug Wire Protocol的缩写
server=y表示是监听其他debugclient端的请求
address=8000表示服务会在端口号8000监听debug请求,客户端必须设置这个端口号才能进行dubug
suspend表示是否在调试客户端建立连接之后启动 VM。如果为y,那么当前的VM就是suspend直到有debug client连接进来才开始执行程序。如果你的程序不是服务器监听模式并且很快就执行完毕的,那么可以选择在y来阻塞它的启动,当然如果是服务器监听模式设置为n;
放在tomcat下面的web项目
修改/usr/local/apache-tomcat-8.0.39/bin/startup.sh
添加declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8788"
通过ps -aux|grep tomcat查看启动的tomcat进程,刚才配置的-Xdebug等选项出现在进程信息中,证明配置成功
客户端:
eclipase:
设置 Debug configurations-->Remote Java Application
注意在点击【Debug】按钮之前,一定不要多次“启动本地程序”,否则就会出现"Failed to connect to remote VM. Connection refused"异常,如下图所示:
3. 调试远程客户端
点击【Debug configurations】中的debug按钮,运行效果如下,接下来,就和本地调试一模一样了。在调试过程中,日志打印在远程服务器,本地console中看不到日志信息。如果是项目为web项目,调试的时候需要一个Http客户端发起请求,比如postman等等。
如果需要对循环中的数据进行调试,使用条件断点是个不错的选择。将断点设置在指定的位置上,右键进一步设置断点属性,如下:
调试时,程序会中断在符合条件的代码处。
断点不仅可以设置在某一行,也可以针对整个工程进行设置。假设你知道程序会在某个地方抛出NullPointerException,可是并不是每一次运行都会出现,就可以为工程设置异常断点,如下:
idea客户端
备注:
备注转自如下四篇篇博文,稍作修改。
https://blog.51cto.com/204222/2115352
https://www.cnblogs.com/jianliang-Wu/p/7110681.html
https://www.cnblogs.com/east7/p/10285955.html
https://blog.csdn.net/tengdazhang770960436/article/details/85254026
原文:https://www.cnblogs.com/ykpkris/p/12441850.html