远程调试是说,我们可以通过idea或eclipse的调试器连接到另一台计算机的java进程进行调试(例如断点,单步执行什么的),如果一个问题在本地无法重现,那么远程调试就是很好的应对方法。
首先,远程调试是需要一个开放的端口,服务器来说,一般以Linux居多,通常它们都是有防火墙的,如果需要远程调试,就得先开放一个tcp的端口供调试使用,idea的远程调试默认使用的是5005端口。
以idea为例,使用idea调试远程的应用,需要这样做:
首先,打开运行配置(Run Configuration),新建Remote方式,
然后填写一个线上环境可以开放的端口,或者可以临时开放一个供调试使用,用完就把他关闭,接下来选择Java版本,不同版本的调试参数有点区别。
复制command line arguments for remote JVM下面的参数,将里面的suspend=n改为suspend=y,这样java在启动的时候会暂停并且等待Debugger的连接,idea的调试器连接到远程应用之后,应用才会启动,就像本地的debug命令一样。
除非你想让Java始终都有一个接口用于调试,不然我认为suspend=y比较利于调试。
那么这个参数加到哪里呢?
只要加到远程应用启动时候的java命令就行:
=
这样,远程服务就会启动java并且停下来等待调试器连接了。
那么关于那些构建构建,比如maven如何远程调试,这就很简单了,只需要将这个jvm参数配置到maven的命令里面,让他运行应用的时候附上这个就能做到调试了,比如这样:
=
总之呢,不过什么build工具,一般都会提供附加jvm参数的地方,只要在这个时候把调试参数加进去就ok了。
其实之前用exe4j打包的java,打包之后运行出现问题,也是可以通过这种办法远程调试的,在打包的时候附上参数,然后exe运行的时候就可以用debugger连接调试了。
至于怎么连接,你看到那个configuration里面的host了吗?在那个填写域名或者ip,然后保存配置,并且使用这个配置按通常方式进行调试即可,开始调试之前注意要先启动远程的应用。