1

前言

  1. 部分时候,程序在本地环境跑的很好,但是一到线上环境就各种出错,笔者除了看日志就没有什么比较好的方法了。无意之中发现了idea可以实现线上debug,这对笔者这种辣鸡程序员来说简直是福音呀!
  2. 此种方式可以实现war包远程部署并调试,jar包可以通过另一种方式实现,本文暂时不赘述,实在想要通过这种方式部署jar包,可以把jar包改成war包,方式一样可行;
  3. 该文章需要读者具备一定的linux基础;
  4. 笔者能力有限,有理解不足,失误的地方,请大家指正,谢谢。

环境准备

  1. linux服务器(本文采用某品牌旗下云主机)
  2. 安装tomcat(注意版本要与本地tomcat版本一致)
  3. idea 2018.3(低版本也可以,但是官方文档说只有Ultimate版本才支持这个功能)
  4. xshell(用于连接linux服务器并进行相应设置)

注意事项

  1. 因为是使用云主机,所以需要在对应云主机安全组上开放对应端口(本文中用到了8080,1099,5050端口);
  2. 远程部署之前最好clean掉上一次生成的文件;
  3. 笔者按照我的文章,难免会出现意外情况,可以在文章后提出,大家一起讨论,毕竟我也弄了几天才成功,期间问题不断;

实现步骤

  • idea中设置FTP(用于传输本地文件到指定linux主机文件夹中)

       tools -> Delpoyment -> configuration

    clipboard.png

       输入云主机IP地址,点击Test Connection 按钮,连接成功后进行下一步,其中root path在test成功之后点击Autodetect自动识别

    clipboard.png

       在Mapping标签中将本地文件夹和linux服务器上部署的位置做一个映射(功能待确定)
    

    clipboard.png

  • idea编译设置

       File -> project Structure ,新增Artifacts,用于后期部署。如果不能选择Archive中的from Modules,先新增Web Application: Exploded,然后新增web application: archive(笔者能力有限,这里应该有更加合理的方式,无奈笔者无法找出)
    

    clipboard.png

       output directory:可以直接使用自动生成的地址,创建ManifestFile文件(点击create),然后选择指定的启动类。

    clipboard.png

  • idea Debug设置

       接下来我们开始设置远程调试相关配置,其中将会设计到三个端口,也就是8080,1099,5050,我们将在本小节最后对该三个端口做出解释。

    clipboard.png

       此时选择我们上一步生成的mytatis-xml:war包(这表示上传war包到服务器,war exploade表示上传war解压过后的文件,原本两种方式都可以,但是第二种不知道为何本地一直调试不通,所以采用了第一种。方式名称根据不同项目名不同,不必与笔者一模一样)

    clipboard.png

    clipboard.png

      下图中的路径是自动生成的,不要改动,否则将会导致后面无法访问到接口

    clipboard.png

       此时该图中路径也自动变更了,不需要人为修改

    clipboard.png

       点击Debug,并且把port改为5050,然后复制中间箭头所指的一段代码
    
       -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5050
       
       我们需要把该段代码写入tomcat的catalina.sh文件
    

clipboard.png

端口解释:
    8080:tomcat工作端口
    1099:Jmx工作端口
    5050:远程debug端口
  • 云主机tomcat设置

       
       编辑tomcat/bin/catalina.sh脚本,新增以下内容
       
       CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5050
       -Dcom.sun.management.jmxremote=
       -Dcom.sun.management.jmxremote.port=1099
       -Dcom.sun.management.jmxremote.rmi.port=1099
       -Dcom.sun.management.jmxremote.ssl=false
       -Dcom.sun.management.jmxremote.authenticate=false
       -Djava.rmi.server.hostname=xx.xx.xx.xx"
       
       其中第一句话与我们上面复制的有关,jmx相关端口设置为1099,hostname改为云主机实际的IP地址;
       
       修改catalina.sh脚本之后,我们对应的启动命令为:./catalina.sh start;关闭命令为:./catalina.sh stops,而不是使用start.sh和shutdowan.sh
       
       使用./catalina.sh start命令启动tomcat,如果之前已经启动了,请先关闭tomcat.
       
       cat tomcat/log/catalina.out日志应该有启动字样,如下图
    

    clipboard.png

       使用lsof -i:8080/5050/1099端口应该都是被同一个程序占用监听

    clipboard.png

       
      到这一步服务器端已经全部准备完毕!
       
  • idea远程部署

       部署之前最好先清理生成文件。
       
       然后点击debug,出现下午底部字样表示远程部署成功,此时在代码中下断点,就可以顺利的调试了。

    clipboard.png

不足之处

能顺利进入断点,但是线上会出现三个类似同名文件,笔者不知道造成该情况的原因,如果有大神知道,请告知,万分感谢。

clipboard.png

参考资料

idea官方帮助文档:https://www.jetbrains.com/hel...


Mr_z
3 声望0 粉丝