如题,本来以为在Linux上debug不是多难的一个事儿,结果生生卡了好多天才解决,赶紧记录一波。
先附上在此过程中查找的相关资料:
1、maven工程、打jar包debug
Idea如何远程连接linux服务器进行debug操作
2、非maven工程、不打jar包debug
IntelliJ IDEA如何远程连接Debug Linux上的Java程序
不打jar包debug
第一步:
写一个Java工程:(非maven的普通工程,代码网上找的)
先在idea中debug一次,生成.class文件:
然后把.class文件部署到Linux服务器上,我的机器是win7的,没法使用scp命令进行部署,所以我用的是一款工具:WinSCP
主机名是Linux服务器IP,端口号我没动,用户名密码是Linux服务器登录时的用户名密码,然后保存并登录即可。
接下来直接找到.class文件的位置,用鼠标拖到服务器里:
完成后.class文件就部署到服务器的对应目录下了(我随意部署在了/root目录下,导致后来出了问题找了很久很久…)
接下来在/root目录下输入命令:
java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.cd.RemoteDebug
显示以下界面:
接下来配置idea:
OK,万事俱备,开始debug!
结果,出问题了。。。
于是我又试了多种不同方式,最终发现在原博客中将.class文件部署到服务器时用的命令如下:
$ scp -P 22 ./com/pkslow/basic/RemoteDebug.class root@xxx.xx.xx.xxx:/root/remoteDebug/com/pkslow/basic/
也就是说,.class文件并不是随便部署到/root下就行的,于是我修改了文件路径将我的.class文件放在对应目录下:
再在/root/debug_test2路径下输入命令java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.cd.RemoteDebug后终于成功了:
通过后续实验,发现几个需要注意的地方:
1、服务器中的.class文件的相对路径不能变,必须是debug_test2/com/cd/RemoteDebug.class
2、命令java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.cd.RemoteDebug必须在debug_test2下输入,而debug_test2本身可以移动到其他路径下
3、命令中必须是com.cd.RemoteDebug
原因还不清楚,之后水平提高或许能搞懂原因为何。也希望如果有高手看到这篇文章能告知原因,代码格式已在上文附上
后续补充:
新发现只需要保证服务器下的目录结构和idea中src目录下的结果相同即可,也就是说只需要保证服务器中是com/cd/RemoteDebug.class,同时命令java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.cd.RemoteDebug需要在com目录的上级目录下输入执行
此处推荐一个新找的的debug博客:
linux命令行 jdb,如何使用加多宝(jdb)在linux下调试Java程序
打jar包来debug
可以完全借鉴开头我附上的博客,只是需要注意原博客此处:
如何开启端口号的方法,我是通过nc命令实现的:
nc命令的详细介绍烦请百度,此处不再赘述,要想退出nc命令只需要Ctrl+C即可