开发者

Java远程debug调试的操作步骤

开发者 https://www.devze.com 2025-04-16 10:38 出处:网络 作者: liyanchao2018
目录1、将项目打成jar包,上传服务器,使用命令启动jar1.1、解析启动命令含义1.2、整体命令结构1.3、JdwP 选项参数1.4、示例场景2、idea设置远程调试3、执行debug4、Java命令启动项目,使用-jar myApp.jar与主类名启
目录
  • 1、将项目打成jar包,上传服务器,使用命令启动jar
    • 1.1、解析启动命令含义
    • 1.2、整体命令结构
    • 1.3、JdwP 选项参数
    • 1.4、示例场景
  • 2、idea设置远程调试
    • 3、执行debug
      • 4、Java命令启动项目,使用-jar myApp.jar与主类名启动myApp的区别:
        • 情况一:使用主类名启动
        • 情况二:使用 JAR 包启动
      • 总结

        idea启动java项目,debug调试远程项目代码操作步骤:

        1、将项目打成jar包,上传服务器,使用命令启动jar

        java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp

        启动命令解析: 这个命令使用的是主类名启动,而非 -jar myApp.jar的方式。

        1.1、解析启动命令含义

        java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 是一个用于启动 Java 程序并开启远程调试功能的命令。下面为你详细解释该命令中各个部分的含义:

        1.2、整体命令结构

        • java:这是 Java 虚拟机(JVM)的启动命令,用于执行 Java 程序。
        • -agentlib:jdwp:这是一个 JVM 选项,用于加载 Java 调试线协议(Java Debug Wire Protocol,JDWP)代理库。JDWP 是一种允许调试器与被调试的 Java 虚拟机进行通信的协议,借助这个选项就能让 JVM 支持远程调试。

        1.3、JDWP 选项参数

        • transport=dt_socket:指定了调试器与 JVM 之间的通信传输方式。dt_socket 表示使用套接字(socket)进行通信,也就是通过网络来传输调试信息,这是最常用的传输方式。
        • server=y:表明当前 JVM 会作为调试服务器。意味着它会监听一个指定的端口,等待外部VirofcQWJ调试器(如 IDE 中的调试工具)来连接。
        • suspend=nsuspend 参数用于控制 JVM 在启动时是否暂停执行。n 代表 no,即 JVM 启动后不会暂停,会正常执行 Java python程序,调试器可以在程序运行过程中随时连接进行调试。若设置为 suspend=y,JVM 启动后会暂停,直到调试器连接成功才会继续执行。
        • address=8889:指定了 JVM 监听的端口号。这里 JVM 会在 8889 端口上等待调试器的连接。在启动调试器时,需要配置相同的端口号,以确保调试器能够与 JVM 建立连接。

        1.4、示例场景

        假设你有一个名为 MyApp 的 Java 程序,完整的启动命令可能如下:

        java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
        

        此命令会启动 MyApp 程序,并开启远程调试功能,允许外部调试器通过 8889 端口连接到该 JVM 进行调试。

        2、idea设置远程调试

        Java远程debug调试的操作步骤

        idea打开java项目后,设置remote jvm debug,选择项目模块,host地址是jar包部署到服务器的地址,port是使用java命令启用的等待调试器链接的端口。

        3、执行debug

        Java远程debug调试的操作步骤

        点击debug启动项目,在浏览器上输入:http://10.1.2.133:8889/user/findAll 在ijavascriptdea中findAll方法中打上断点,访问这个url后,断点就会收到调用,就可以debug调试项目了。

        4、java命令启动项目,使用-jar myApp.jar与主类名启动myApp的区别:

        java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
        java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 -jar myApp.jar

        解析: 服务器启动java项目,可以启动jar包或者寻找主类名启动。

        这个命令不一定非要使用 -jar xxx.jar 来指定启动的 JAR 包。是否使用 -jar 选项取决于你启动 Java 程序的方式。下面为你详细分析不同情况:

        情况一:使用主类名启动

        如果你像给出的命令 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp 这样,直接指定主类名(MyApp)来启动 Java 程序,那么就不需要 -jar 选项。这种方式要求主类 MyApp 必须位于类路径(classpath)下,androidJVM 会在类路径中找到这个类并执行其 main 方法。

        情况二:使用 JAR 包启动

        当你想通过 JAR 包来启动 Java 程序时,就需要使用 -jar 选项。此时,你需要把 MyApp 替换为具体的 JAR 包名称,例如:

        java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 -jar myapp.jar

        在这个命令里,-jar myapp.jar 告知 JVM 从 myapp.jar 这个 JAR 包中寻找主类并执行。要注意的是,这个 JAR 包必须是可执行编程的,也就是在其 MANIFEST.MF 文件中指定了主类。

        总结

        是否使用 -jar 选项要依据你的启动需求来定:

        • 若主类在类路径中,可直接指定主类名启动,无需 -jar 选项。
        • 若要从 JAR 包启动程序,则需使用 -jar 选项指定 JAR 包名称。

        到此这篇关于Java远程debug调试的操作步骤的文章就介绍到这了,更多相关Java远程debug调试内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号