目录
一、Debug模式下,在不重启的前提下使代码生效
二、进阶设置
三、局限
四、通过idea恢复过去版本的代码
五、远程调试
1、RemoteDebug(远程调试)
2、远程JVM参数设置
3、debug条件过滤
4、获取ip和port
一、Debug模式下,在不重启的前提下使代码生效
1、首先将Reload classes after compilation 模式设置为 Always。
2、通过debug启动项目后,当修改了代码后,依次点击Run--》Debugging actions--》Reload Changed Classes,即可在不重启的情况下使代码生效,提升开发效率。
最后会提示有几个类被重新加载了,如果只有0个类,说明你改动的地方并没有影响到程序的运行。
二、进阶设置
为 Reload Changed Classes 设置一个快捷键
步骤如下
三、局限
- 只能修改已有方法的方法体
- 不能添加新成员/删除已有成员/修改已有成员的签名(signature)
四、通过idea恢复过去版本的代码
VCS ==》Local History ==》Show History ==》revert,适合于恢复没有成功commit的代码
五、远程调试
1、RemoteDebug(远程调试)
远程调试,就是我们把打包后的代码部署到服务器上之后,使用本地开发环境连接到服务器部署环境,以这样的方式调试。
2、远程JVM参数设置
RemoteDebug过程是在两个不同的VM实例间进行,需要一个通信方式——socket,因此需要端口设置。
要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数:
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port} ,其中${debug_port}是用户自定义的,为服务端debug端口。
ones-service中端口号8080,具体设置在启动脚本ones-service/deploy/run.sh中,
JVM_ARGS
Java
JVM_ARGS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8418,suspend=n "
参数说明:
-XDebug 启用调试
-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport 用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
server=y/n VM是否需要作为调试服务器执行。
address=8080调试服务器监听的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。
3、debug条件过滤
在断点处,右键(两指),在条件框中输入匹配条件
适用场景举例:1)想打断点但怕影响其他人使用,条件可以输入匹配自己测试的userId;2)循环次数太多,只想断某一次循环内处理逻辑,其他循环都不断,例如在线活动list循环,条件可以输入活动ID
注意:如果条件不满足,则断点不生效;尽量在请求进入服务前设置好条件,临时设置有时不生效
4、获取ip和port
命令:ps -ef | grep java