# 5.IDEA调试技巧2——远程调试

#### 0x01 前言

本文将结合着远程调试weblogic来讲解如何使用IDEA调试远程应用，大家只要掌握核心科技就行

#### 0x02 开启JAVA应用的调试模式

一个应用想要被远程调试，必须以调试模式运行，对于jar包，开启调试模式也很简单

`java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar test.jar`

参数说明：

-Xdebug：通知JVM工作在DEBUG模式下；

-Xrunjdwp：通知JVM使用(java debug wire protocol)来运行调试环境；

transport：监听Socket端口连接方式（也可以dt\_shmem共享内存方式，但限于windows机器，并且服务提供端和调试端只能位于同一台机）；

server：=y表示当前是调试服务端，=n表示当前是调试客户端；

suspend：=n表示启动时不中断（如果启动时中断，一般用于调试启动不了的问题）；

address：=8000表示本地监听8000端口。

当然，对于Weblogic这种别人写的大型应用，启动是很复杂的，一般都会有一个启动脚本或者环境配置脚本什么的，要想使这些应用运行在debug模式下，一般都是需要修改对应脚本的，至于到底是修改哪个脚本，我们可以Google一下，当然，如果搜索的结果不靠谱，也是可以自己摸索的，主要就是通过粗略阅读启动脚本，搜索脚本中的debug、port等关键字，然后修改对应的值（只是这么一个思路，具体情况具体分析）

weblogic就是一个通过脚本启动的应用，且它有一个专门的环境配置脚本，要想让Weblogic运行在debug模式下，就要修改这个脚本

![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-c981947056704269acc85fd6ab310320cb4b8b90%2Fdebug.png?alt=media)

如上图所示，由于我Weblogic是以产品模式安装的，所以我把setDomainEnv.cmd对应位置的debugFlag改为了true,然后运行启动脚本，Weblogic就会以调式模式运行。在同文件中还可以找到应用是调试端口是哪一个,当然，weblogic运行时，在控制台也打印出来了，如果你不清楚某个引用的默认调试端口，你甚至可以百度一下\~

![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-b7d1b825822417d8b91e962c997ef3a66528e6db%2Fdebug_port.png?alt=media)

#### 0x03 IDEA配置远程调试

现在目标应用已经运行在调试模式，且我们也知道其监听的端口了，现在就是需要在IDEA上进行配置了。同样以Weblogic为例

1. **用IDEA随便新建一个工程**
2. **然后IDEA的右上角，配置一下** ![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-6cf7770641905bf21b568f3855361da0c60c9157%2Ffirst.png?alt=media)
3. **创建一个remote server** ![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-d5af42c433853721cb35040b1c5d25b9402ec1c2%2Fsecond.png?alt=media)
4. **配置remote server** ![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-3ff37be014d40b596183f7959824c2ab025cbe85%2Fthird.png?alt=media)
5. **最后选择在右上角我们刚刚创建的remote server,然后点击这个小虫子** ![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-5dd14440564e5e7062043398f8708852917b0c83%2Fforth.png?alt=media) 可以从控制台看到，我们的idea已经成功连接到远端的应用

你以为这就结束了吗？并没有,因为要调试的是远程的应用，我们本地原本是没有远程应用的代码的，所以，即使是调试远程的应用，我们本地也要有一份远程应用的代码，没想到吧，死靓仔\~

我们下载好了远程应用的代码，然后需要把我们要调试的jar包啥的放到对应项目的lib下。具体操作如下，以weblogic为例，我要把weblogic中的一些关键jar包加到lib中：

![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-b57b562346af7831cb8bd54e75b75c2b7be4b085%2F1.png?alt=media)

![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-fea7db6739418cf14336c345cdd024f3aac72a3a%2F2.png?alt=media)

然后选择对应的目录就行了，一般就是把包含jar包的目录加进来,添加完过后就可以在IDEA中访问到很多jar包了，并且IDEA会自动反编译这些jar包中的class文件，我们还可以在对应的文件处下断点，然后就可以开始愉快的调试了\~

![](https://1467638070-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXDNL45uu6Yo5aUtcMFVW%2Fuploads%2Fgit-blob-8e526113cd48be46a41bbcba8b9051e9eb5b867e%2F3.png?alt=media)

#### 其他

一直在纠结有没有必要写这一章的内容，毕竟网上有挺多现成的，而且写好了，我不知道把本章内容放在哪个位置才合适，放在系统文章的开头，可能大家一时半会用不到，放在系列文章的中间，我又怕大家在看到这篇文章前就已经自己摸索出了怎么远程调试，那么我的这篇文章不就没用了吗\~

算了，为了系列文章的对新手友好，我还是稍微写一下吧
