IntelliJ IDEA远程Debug Linux的Java程序,找问题不要只会看日志了(推荐)

 更新时间:2020年09月05日 08:59:43   作者:南瓜慢说  
这篇文章主要介绍了IntelliJ IDEA远程Debug Linux的Java程序,找问题不要只会看日志了,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1 前言

我们习惯于在本地开发的时候debug,能快速定位与解决问题,那部署在服务器上是不是就没有办法了呢?只能通过查看日志来定位?

不是的,在远端的服务器上,我们一样可以debug

2 IDEA的debug

我们先来看一下在IntelliJ IDEA直接debug是怎样的。

先准备一个简单的Java程序:

package com.pkslow.basic;
import java.util.Map;

public class RemoteDebug {
 public static void main(String[] args) {
 System.out.println("------------------start------------------");
 
 System.out.println("get all the system environment");
 Map<String, String> envs = System.getenv();

 System.out.println("\nprint out the contains `HOME`");
 System.out.println("------env HOME------");
 envs.entrySet().stream()
 .filter(env -> env.getKey().contains("HOME"))
 .forEach(env -> {
 System.out.println(env.getKey() + ":" + env.getValue());
 });

 System.out.println("------------------end------------------");
 }
}

功能很简单,获取所有系统环境变量,并打印出含有HOME字段的。

Debug很简单,直接点击以下按钮就可以:

相信大家都知道这一点,但应该很多人都不会注意,IDEA究竟做了什么,为什么就可以调试了呢?我们看一下控制台的日志就明白了:

/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59313,suspend=y,server=n -javaagent:/Users/pkslow/Library/Caches/IntelliJIdea2019.3/captureAgent/debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home/jre/lib/charsets.jar:" com.pkslow.basic.RemoteDebug

简化一下,不重要的参数去掉:

java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59313,suspend=y,server=n com.pkslow.basic.RemoteDebug

这就是可以Debug的原因,利用了Java Agent原理。这个功能很强大,类似一个AOP,代理了Java程序,可以利用它进行调试、热部署等。

3 调试本地程序

我们先试试如何可以调试本地程序,不是直接在IDEA上调试。先要编译出class文件RemoteDebug.class,然后按package结构放好。我通过mvn clean compile来编译。

启动程序,在target/classes/目录执行:

$ java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50050,suspend=y,server=y com.pkslow.basic.RemoteDebug
Listening for transport dt_socket at address: 50050

然后程序就会等待调试客户端的连接,不会往下执行。

配置IDEA以进行调试:

配置完成保存后,点击debug就可以了:

程序已经进入debug模式:

我们已经执行到了其中一行,现在看看服务端:

IDEA是同步的,并且确实已经控制了服务端Java的执行。

4 远程调试Linux Java程序

先把程序部署在Linux上:

$ scp -P 22 ./com/pkslow/basic/RemoteDebug.class root@xxx.xx.xx.xxx:/root/remoteDebug/com/pkslow/basic/
RemoteDebug.class 100% 2572 282.5KB/s 00:00 

通过以下命令在服务端启动程序,这里调试端口改为9999,因为部分端口在远程服务器并没有开启:

java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.pkslow.basic.RemoteDebug

本地电脑IDEA配置如下:

开始debug,正常控制了远程服务端的Java

服务端的实时执行情况:

让程序执行完如下:

$ java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.pkslow.basic.RemoteDebug
Listening for transport dt_socket at address: 9999
------------------start------------------
get all the system environment

print out the contains `HOME`
------env HOME------
JAVA_HOME:/root/jdk1.8.0_131
HOME:/root
------------------end------------------

5 总结

本文一步步探索如何进行调试远程的服务器,这在出现问题时定位还是非常有用的。毕竟可以实时看到服务端运行环境。

到此这篇关于IntelliJ IDEA远程Debug Linux的Java程序,找问题不要只会看日志了的文章就介绍到这了,更多相关IDEA远程Debug Linux的Java程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot Admin 如何实现Actuator端点可视化监控

    SpringBoot Admin 如何实现Actuator端点可视化监控

    这篇文章主要介绍了SpringBoot Admin 如何实现Actuator端点可视化监控,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • jwt生成token和token解析基础详解

    jwt生成token和token解析基础详解

    这篇文章主要为大家介绍了jwt生成token和token解析基础,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java实现去重的方法详解

    Java实现去重的方法详解

    austin支持两种去重的类型:N分钟相同内容达到N次去重和一天内N次相同渠道频次去重,这篇文章就来和大家讲讲这两种去重的具体实现,需要的可以参考一下
    2023-06-06
  • Springboot常用方法参数注解示例详解

    Springboot常用方法参数注解示例详解

    这篇文章主要介绍了Springboot常用方法参数注解及示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • JAVA如何定义构造函数过程解析

    JAVA如何定义构造函数过程解析

    这篇文章主要介绍了JAVA如何定义构造函数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 深入浅出Java中的字节流和字符流详解

    深入浅出Java中的字节流和字符流详解

    Java 中的输入输出(I/O)流主要分为字节流和字符流,这两类流为开发者提供了高效的文件读写方式,也解决了不同编码格式下的字符处理问题,本文将带你深入了解字节流和字符流的区别、应用场景以及如何使用它们处理文件操作
    2024-12-12
  • JAVA用户自定义事件监听实例代码

    JAVA用户自定义事件监听实例代码

    这篇文章主要介绍了JAVA用户自定义事件监听实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • idea如何添加文档注释

    idea如何添加文档注释

    这篇文章主要介绍了idea如何添加文档注释,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • SpringSecurity集成第三方登录过程详解(最新推荐)

    SpringSecurity集成第三方登录过程详解(最新推荐)

    在ThirdAuthenticationFilter 类的attemptAuthentication()方法中,我们通过authType类型,然后创建对应的Authentication实现来实现不同方式的登录,下面给大家分享SpringSecurity集成第三方登录过程,感兴趣的朋友一起看看吧
    2024-05-05
  • springboot配置开发和测试环境并添加启动路径方式

    springboot配置开发和测试环境并添加启动路径方式

    这篇文章主要介绍了springboot配置开发和测试环境并添加启动路径方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论