前言:
有时候我们定位测试环境的问题,或者线上的问题,不好定位,由于之前写代码日志打的少了,或者代码复杂,并且异常描述也不是很详细,直接看代码不好定位具体问题在哪,这个时候就需要进行代码调试了,
但是,你本地调试代码总是有缺陷的,例如本地的数据和测试环境或者线上环境的数据总有出入,若是导数据过来,就很麻烦。
所以,就非常有必要直接连远程的代码,进行debug调试;
因此远程debug应运而生;
idea远程debug操作(测试环境,线上环境)
1:首先修改jar包启动参数
我们项目是用docker-compose.yml来整合发布项目的,因此我这里的例子都是在这个文件里面修改的,其实和直接启动jar大同小异;
docker-compose.yml文件:
version: '3'
services:
pulsar_simulator:
image: openjdk:8-jdk
#image: openjdk:8-jdk:8-jdk
container_name: spring-cloud-test
network_mode: bridge
restart: always
tty: true
ports:
- 2011:2011
- 2012:5555
extra_hosts:
- "atong.com:XXXX"
volumes:
- /data/workspace/spring-cloud-test/:/atong
- /etc/localtime:/etc/localtim
working_dir: /hairou
#command: java -Duser.timezone=GMT+08 -jar application.jar
command: java -Duser.timezone=GMT+08 -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5555 -jar application.jar
简单说明:
这里我们服务(spring-cloud-test)的启动端口是2011,
若是需要远程debug,修改原有的启动命令,增加:
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5555
表示以debug模式启动项目;
5555是设置的远程debug端口;
因为是运行在docker中,所以还要映射端口:
所以这里我们把5555,映射到宿主机的2021端口;
这样,我就可以用2012来远程debug了;
2:配置idea进行远程debug
2.1:在Idea中创建Remote
配置完之后,就可以远程了
点击idea debug 按钮,
控制台打印:
Connected to the target VM, address: 'XXXXX:2012', transport: 'socket'
表示远程连接成功。
这个时候我们就可以在需要调试的程序的代码块,打断点,
然后调用服务器上的程序接口,就会自动进入断点,可以debug看代码了;