Java Remote Debug(远程调试)

【华邦云使用过】:

-agentlib:jdwp=transport=dt_socket,address=9090,server=y,suspend=n

SpringBoot远程Debug步骤

配置Maven

首先在Maven的pom.xml中配置好如下信息:

<project> ... 

      <build> ... 

           <plugins> ... 

               <plugin> 

                   <groupId>org.springframework.boot</groupId> 

                   <artifactId>spring-boot-maven-plugin</artifactId>

                   <version>1.1.12.RELEASE</version> 

                   <configuration> 

                   <jvmArguments> 

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 

</jvmArguments> 

                    </configuration> ... 

              </plugin> ... 

           </plugins> ... 

      </build> ...

</project>

启动Springboot项目-jar文件:

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,否则会报错,连接被拒绝。

简单介绍下以上参数的含义:

-Xdebug是通知JVM工作在DEBUG模式下

-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项

transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式

server参数是指是否支持在server模式的VM中

suspend指明,是否在调试客户端建立起来后,再执行VM,如果为y,那么当前的VM就是suspend直到有debug client连接进来才开始执行程序。如果你的程序不是服务器监听模式并且很快就执行完毕的,那么可以选择在y来阻塞它的启动。

address=5005 调试服务器的端口号,客户端用来连接服务器的端口号。

配置Eclipse

在需要的项目上“ 右键->Debug As->Debug Configuration” 如图所示:

在①处右键,new

在②处起一个名字,随意

在③处选择需要监听的项目,(对于多项目依赖启动的工程来说,启动哪个项目,就监听哪个项目)

在④出填写主机IP,比如本机localhost,端口为上一步骤用命令启动时设置的address的端口号,这里为5005.

点击Apply->Debug开始监听即可。

Eclipse debug时报错 连不上虚拟机(Cannot connect to VM)  

我是在Fedora7(内核版本为2.6.24) 下安装的Eclipse (INDIGO),JDK版本为1.7.0。折磨了我两天的问题终于解决了。下面说说我的解决过程吧。

先说一下现象:

运行Eclipse,编写程序,运行,一切正常。可是当设上断点debug时,程序并不停在断点上,其效果与运行一样。同时Eclipse会报出如下错误:

 

Cannot connect to VM

com.sun.jdi.connect.TransportTimeoutException

 

说实话其原因我也真是不清楚。上网查主要有以下几种说法(解决方法下面会讲):

1)Eclipse与ipv6不兼容导致的问题,解决办法是将ipv6卸载或关闭

2)localhost设置问题

3)Eclipse中JRE的配置问题。

 

下面说一下解决方案:

1)禁用ipv6

事实上就是简单的几步,我们可以修改下面两个文件以阻止IPv6内核模块的加载:

/etc/modprobe.conf - 内核模块配置文件

       /etc/sysconfig/network - 网络配置文件

/etc/modprobe.conf

编辑/etc/modprobe.conf文件, # vi /etc/modprobe.conf

在其中加入下面这一行,

 install ipv6 /bin/true

保存并退出。

 

/etc/sysconfig/network

编辑/etc/sysconfig/network文件, # vi /etc/sysconfig/network

在其中加入下面配置项:

NETWORKING_IPV6=no

IPV6INIT=no

保存并退出文件。

 

重启网络:

# service network restart

# rmmod ipv6

也可以直接重启以便使用刚刚做的更改生效:

# reboot

如果想检查当前IPv6是否已禁用,可以使用下列命令:

 # lsmod | grep ipv6

# /sbin/ifconfig

2)设置localhost

保证 /etc/hosts文件中有如下一行:

127.0.0.1 localhost.localdomain localhost

如果有就不作处理,没有就填上。

3)将Eclipse中配置的JRE全部改为JDK

在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。

好了,终于写完了,Good Luck!

Java远程调试(Remote Debug)可导致远程命令执行漏洞

更新时间:2017-06-07 13:26:11   分享:   

Java 虚拟机为Java语言提供Java debugger、JDB调试功能,应用在编译过程中可以开启Remote Debug模式,方便程序员远程对代码进行调试。但由于该模式没有身份校验机制,且可执行系统命令,黑客可连接该端口直接对主机进行入侵。

漏洞编号:

暂无

官方评级:高危

漏洞描述:

Java应用在编译过程中可以开启Remote Debug模式,方便程序员远程对代码进行调试。但由于该模式没有身份校验机制,且可执行系统命令,黑客可连接该端口直接对主机进行入侵,严重情况下,可能导致获取服务器权限,从而导致数据泄露。

漏洞修复建议(或缓解措施):

1.关闭Remote Debug模式。

关闭Java Debug模式进程,例如一下进程:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=7001,suspend=n

以下举例使用tomcat中间件关闭Remote Debug模式方法:

注释startup.sh2  

#!/bin/bash

#declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent   -Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8788"

重启对应项目tomcat服务

2.使用ECS安全组防火墙先知外部IP对Remote Debug 端口的访问。

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值