1、背景
在很多情况下,服务端程序部署在远程,某部分逻辑出现问题时,不停地对代码修改,增加log查出问题根源。但是,有些服务启动时间较长、不断的打包、上传、测试会令人非常头疼。因此,可以使用远程调试的方式对远程部署的服务调试。
2、准备
- idea IDE、远程服务源码
- 远程服务
- 测试客户端
3、部署图
由于是对源码进行调试,源码经编译后运行在远程服务器上,并且在本地Idea IDE中打开源码。在Idea连接上远程服务后,测试请求远程服务,在可以看到idea中设置的断点信息。
4、步骤
- 4.1 远程服务tomcat/bin/catalina.sh中增加特定JVM参数
其中,
-Xdebug是通知JVM工作在DEBUG模式下,
-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:
- transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。
- server参数是指是否支持在server模式的VM中.
- onthrow指明,当产生该类型的Exception时,JVM就会中断下来,进行调式。该参数可选。
- launch指明,当JVM被中断下来时,执行的可执行程序。该参数可选
- suspend指明,是否在调试客户端建立起来后,再执行JVM。
- onuncaught(=y或n)指明出现uncaught exception 后,是否中断JVM的执行.
- address=8889为debug端口,idea需要连接此端口。
-
4.2 idea连接远程服务
按照下图的三个步骤进行操作,建立远程连接。
左上角+号添加remote
-
4.3 debug
在远程服务启动后,点击下图中的debug(shift+F9)进行调试,并在代码中设置好断点。
-
4.4 客户端请求
从图中看到,当请求后,变量值不仅动态出现在代码后面,而且在底部也有相应的变量值。
5、备注
只有添加的断点中有对号时,才表示断点有效。
如果出现下图情况,可以看看是否是禁用了断点。
注意:需要在本机和服务器上建立端口映射!!!