search.png
关于我
menu.png
IDEA 远程调试神技能

问题描述:

同事的代码跑的起来,但是我的代码跑不起来,代码都是同一个git仓库里的最新版本,依赖也是同一个maven仓库,这是什么原因?

定位问题可能在某个包有问题。因为代码是一样的。就可能是包不一样,同事可能替换了某个包。也有可能是我本地环境的问题,我是用的IDEA,而同事用的是STS。

我让同事打个包给我,我想对比一下里边依赖的jar包的大小。没成想根本没法子对比,依赖实在太多了,看的眼睛都快花了。

我直接 java -jar 运行了同事打的jar包。运行没有问题,很顺利的跳过我报错的地方,然后成功启动。我突然想到,如果可以在我报错的那个地方打个断点,看看同事的这边为啥不报错,不就可以知道问题所在了吗。百度了一下,发现IDEA是可以远程调试的。我查了几个教程,就开始上手试试了。

配置

配置并不复杂,总结起来大致有以下几个步骤:

1、启动jar 包,同时JVM参数加上:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555
比如说要启动一个hello.jar,并且是本地跑这个jar包,那么直接设置127.0.0.1作为远程调试的IP,5555是远程调试的端口,这个可以自由指定,不要端口冲突就好了。
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555 hello.jar
如果说这个jar包运行在远程服务器,那么这个address的IP就应该是你本机的真实IP,而不是用127.0.0.1。
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=192.168.x.x:5555 hello.jar
也可以不加IP,直接5555,但是不太安全,谁都可以通过5555端口调试,因此并不推荐。
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5555 hello.jar

2、IDEA 添加新configurations

点击+,然后选择Remote:

在这里插入图片描述
在这里插入图片描述

注意事项参见图片。

3、在IDEA中debug该configuration

点击绿色小虫

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4、在代码中打断点进行DEBUG

之后运行到该位置就会断到了。可以进行分析。找出问题。

总结

远程调试可以更快的发现代码的问题。但是,如果是生产环境,是不能随便断点的!切记。

远程调试更容易发现一些环境上的问题。发现那些代码一致、但是无法运行,并且和数据库无关的问题(有一些BUG是特殊的数据导致的)。

如果是tomcat 可以通过在catalina.sh文件的第一行添加:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8089"

版权声明

知识共享许可协议 本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
发布时间:2021年02月19日 10:23:37

评论区#

还没有评论哦,期待您的评论!

关闭特效