利用intellij进行远程调试

五天前,张大胖负责的开发团队向运维部门交付了一批新代码,这是一次用户期待已久的重要升级,部署进行得非常顺利,大家都很高兴。

可是今天生产环境的CPU持续接近100%,有好几台服务器都down机了, 运维老大勃然大怒:“已经是第三次了! 张大胖,你们开发团队怎么搞的? 新代码一上线CPU就100%!”

张大胖自然也不甘示弱:“我们在测试环境测试得非常充分,用户压力比生产环境大多了,代码坚如磐石,肯定是你们配置错了什么东西!”

“不可能,我们是严格按照你们要求的步骤来部署的,肯定是你们代码的问题!”

“那测试环境怎么就没有问题?”

......

--------节选自 http://mp.weixin.qq.com/s/l6mPQIkjLNERrBn41wA3xA

除了devOps的自动化部署,保证了部署和配置的正确性后,如果代码有缺陷,程序员该如何背锅?

以下就是介绍利用intellj远程调试已部署在服务器上的程序
准备材料:
一个springboot项目
一个intellij

首先在pom包中加入一个插件

<plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                            <version>1.1.12.RELEASE</version>
                            <configuration>
                                <jvmArguments>
                                     -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5003
                                </jvmArguments>
                            </configuration>
                        </plugin>

该项放在了<plugins></plugins>中,
若在你的项目中,事先有了 一个springbootmavenplugin,可能会提示这样的错误:

image.png

什么鬼?
那好吧,我去修改一下


image.png

将<jvmArguments>加入这个<configuration>中就不会报错了,看来还是我的基础不够扎实
其中需要注意的是这一段配置:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5003
                

具体这句话什么意思我就不说了,重点是address=5003,这个5003就是你的自定义远程监听端口

好了,接下来,clean&install Maven Project

image.png

生成jar包,你的第一步就完成了。
第二步,配置intellij为远程调试状态。

编辑启动项


image.png

添加一个remote启动项


image.png

image.png

编辑host的localhost和port为你所需要远程调试的地址,和刚刚配置好的5003(默认端口是5005,由于我本人的原因,试端口到了5003)

image.png

这里改成你的项目(我不清楚不选会有什么问题发生)


image.png

点击ok

第二步完成。

接下来就是在linux上运行刚刚部署好的jar包,注意,代码是这样的:

java -jar -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5003,suspend=n instruments20180203.jar

其中5003是我刚刚自定义监听的端口,instruments20180203.jar是我build好的jar包的名字,该jar包在当前目录下

image.png

运行该代码,你会发现可能会有一种“端口被占用”的错误,其一是你的jar包占用的端口,我的项目端口是8080,其二是你监听的端口被占用,我的是5003


image.png

此时两个选择,1,换一个端口,2,kill端口

推荐换端口,如果你不知道占用端口是什么程序的话

由于我知道我现在占用的就是我之前运行的java程序,所以我选择kill

lsof -i:端口号
kill -9 PID
image.png

解决端口占用问题后就再来一次

已在5003端口监听


项目启动成功


image.png

然后点击绿色小bug进行远程bug调试吧!

什么!connect reset!!这是什么错!!!


image.png

(注意:改成5005是为了演示错误信息)
在我第一次尝试远程调试的时候就因为这个原因而无法进行远程调试,当我百度,bing,博客园,简书,stackOverflow等等任何可以让我知道我该怎么办的地方发现都找不到 为什么会出现这个报错,我一怒之下放弃了远程调试
第二天,部署的同学告诉我,没有开放5003端口,我才知道,哦~原来不开放端口就不能用啊!(还是基础不够扎实,这点都不知道)
第二天晚上,我申请了5003的端口


image.png
image.png

重复我以上的步骤之后,在浏览器中输入我的测试服务器的地址,然后intellij在相应的地方打断点,浏览器操作一番,成功卡在了断点上!


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,237评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,221评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,837评论 25 709
  • 又一年父亲节,又一轮年岁月。 本来我们小一辈的打算为家中的父亲们过一个特殊的父亲节,但计划赶不上变化,最后还是简简...
    TKJun阅读 1,747评论 3 2
  • 我拖着箱子来到杭州,匆匆找房住,我没带被子就这样和衣睡了一晚上,第二天匆匆的去上班,家里人觉得我工作和上学...
    北方城阅读 1,625评论 0 0

友情链接更多精彩内容