背景
debug是比较高效,并且常见的一种解决代码故障的方法(真实情况其实是。。通过日志看不出来,,才无奈选择)
这次分两级介绍远程debug的方法(其实第二级才是我主要想记录的东西。。毕竟第一级,,终究是第一级):
- 一级别就是debug一台可以从本地直连的服务器;
- 二级是说一下如何debug一台本地需要通过跳板机才能连接的服务器;
ps:这里用的是IDEA进行debug代码
远程debug方法
首先,你代码得写得能运行,这是最基础的。。
假设你已经把代码放到了服务器了;并且能正常启动了
debug可以直连的服务器
配置服务端
在Idea中打开"Edit Configuration..."
在下图1处配置程序部署的IP,2处配置一个服务端还没有被占用的端口(在服务端使用“lsof -i:端口”可以看端口有没有被占用——有回显就是被占用了,没有回显就表示没有占用)
修改服务端启动命令
上图中3处的文本复制下来,贴到服务端的java程序启动命令中,例如:
原来的启动命令是:
java -jar myClass.jar
把上图中3处的文本贴到启动命令之后是:
java -agentlib:jd...(中间省略)...8005 -jar myClass.jar
(配置完了记得点"OK",这个不用我说把。。。)
重启服务端
然后把服务器上的服务重启一下;
开始debug
点击Idea的debug按钮连接服务:
如下图就表面已经连接到了远程服务
通过跳板机debug远程服务
大多数情况下让人头疼的遇到了问题,想去debug的时候,发现本地无法直连服务端,,,,淡淡疼
于是,如何通过跳板机进行远程debug,就有必要学习下了(只不过你绝对没有想到会这么简单);
正题开始
一开始的动作和第一级的普通debug一样,就当作是可以直连的操作,步骤没啥要说的,和上面一样;
就是最后点击debug按钮的步骤要到操作完以下动作
首先是找到你的跳板机。
这里,假设不可直连的ip是10.45.150.42,然后,服务的debug端口是8005;
打算在本地通过跳板机的8005端口进行debug;
在跳板机执行如下语句即可
ssh -C -f -N -g -L 8006:10.45.150.42:8005 gavin@10.45.150.42
实际操作:
[gavin@gavin029 soft]$ lsof -i:8005 #先看看跳板机的8005端口有没有被占用
[gavin@gavin029 soft]$
[gavin@gavin029 soft]$ #没有回显,表面没有被占用
[gavin@gavin029 soft]$ ssh -C -f -N -g -L 8006:10.45.150.42:8005 gavin@10.45.150.42
gavin@10.45.150.42's password:
[gavin@gavin029 soft]$ lsof -i:8005 #可以看到此时端口已经成功启动了
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 26739 gavin 4u IPv4 687979297 0t0 TCP *:mxi (LISTEN)
ssh 26739 gavin 5u IPv6 687979298 0t0 TCP *:mxi (LISTEN)
这会就可以点击debug按钮了;就当能够直连的那种操作即可