通常,线上的程序出现问题我们需要排查时,我们的方案都是通过查看日志或者在本地运行同样的代码debug进行调试。但由于环境问题往往排查的过程不是很顺利。在这里告诉大家如何通过idea在本地对线上的程序进行远程调试,只要有源代码,并且启动项目时做好配置,就可以在本机直接远程调试服务器上的代码。步骤如下:
1.项目启动时,添加以下参数,允许远程调试:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=${debug_port}
其中${debug_port}是用户自定义的,为debug端口本地连接远程debug端口。
注意:远程调试从技术上讲,就是在本机与远程建立scoket通讯,所以端口不要冲突,而且本机要允许访问远程端口
否则会出现以下错误信息
2.配置idea
edit configurations + remote
host处填写远程服务器的iP,端口填写debug 端口,如果包含多个module,可以选择要运行的module的名字
3.测试
1.我们这里有一个springboot项目jar包
2.执行以下命令运行jar包
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8011 test-remote.jar
同样也可以用以下命令后台启动项目
nohup java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8011 test-remote.jar >/null 2>&1 &
3.配置好idea,debug启动
4.这样就说明已经启动成功,我们可以直接在本地需要调试的地方打断点,然后访问线上的接口查看调试结果
5.可以发现,成功在本地进行远程调试。
END