-agentlib:jdwp=transport=dt_socket,address=9090,server=y,suspend=n
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.1.12.RELEASE</version>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
ava -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=端口号 -jar xxx.jar
例如: java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -jar Testdemo-1.0.0-SNAPSHOT.jar 将项目启动起来后,再去配置Eclipse,否则会报错,连接被拒绝。
-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项
transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式
suspend指明,是否在调试客户端建立起来后,再执行VM,如果为y,那么当前的VM就是suspend直到有debug client连接进来才开始执行程序。如果你的程序不是服务器监听模式并且很快就执行完毕的,那么可以选择在y来阻塞它的启动。
address=5005 调试服务器的端口号,客户端用来连接服务器的端口号。
在需要的项目上“ 右键->Debug As->Debug Configuration” 如图所示:
在③处选择需要监听的项目,(对于多项目依赖启动的工程来说,启动哪个项目,就监听哪个项目)
在④出填写主机IP,比如本机localhost,端口为上一步骤用命令启动时设置的address的端口号,这里为5005.
Eclipse debug时报错 连不上虚拟机(Cannot connect to VM)
我是在Fedora7(内核版本为2.6.24) 下安装的Eclipse (INDIGO),JDK版本为1.7.0。折磨了我两天的问题终于解决了。下面说说我的解决过程吧。
运行Eclipse,编写程序,运行,一切正常。可是当设上断点debug时,程序并不停在断点上,其效果与运行一样。同时Eclipse会报出如下错误:
com.sun.jdi.connect.TransportTimeoutException
说实话其原因我也真是不清楚。上网查主要有以下几种说法(解决方法下面会讲):
1)Eclipse与ipv6不兼容导致的问题,解决办法是将ipv6卸载或关闭
事实上就是简单的几步,我们可以修改下面两个文件以阻止IPv6内核模块的加载:
/etc/sysconfig/network - 网络配置文件
编辑/etc/modprobe.conf文件, # vi /etc/modprobe.conf
编辑/etc/sysconfig/network文件, # vi /etc/sysconfig/network
127.0.0.1 localhost.localdomain localhost
在Eclipse中的Windows-> Preferences -> Java -> Installed JREs中
点击Search,搜索JDK的安装路径(如果使用RPM安装的,其默认路径为/usr/java)
搜索结束后会多出三个选项(default、jdk1.7.0、latest)选择jdk1.7.0。
然后在下面的Execution Environment中将J2SE-1.2到J2SE-1.5以及JavaSE-1.6、JavaSE-1.7还有JRE-1.1的Compatible JREs全部选为jdk1.7.0。点击OK。
如果你同时还遇到了,我上一篇博客《Linux下SWT“no swt-pi-gtk-3232 in java.library.path”的错误》里提到的问题。那么,如果你采用第一种方法,你需要将那些.so的文件放到jdk的lib目录下。如果jdk用rpm安装的话,默认路径为 /usr/java/jdk1.7.0/lib/i386。
Java远程调试(Remote Debug)可导致远程命令执行漏洞
Java 虚拟机为Java语言提供Java debugger、JDB调试功能,应用在编译过程中可以开启Remote Debug模式,方便程序员远程对代码进行调试。但由于该模式没有身份校验机制,且可执行系统命令,黑客可连接该端口直接对主机进行入侵。
Java应用在编译过程中可以开启Remote Debug模式,方便程序员远程对代码进行调试。但由于该模式没有身份校验机制,且可执行系统命令,黑客可连接该端口直接对主机进行入侵,严重情况下,可能导致获取服务器权限,从而导致数据泄露。
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=7001,suspend=n
以下举例使用tomcat中间件关闭Remote Debug模式方法:
#declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8788"
2.使用ECS安全组防火墙先知外部IP对Remote Debug 端口的访问。