远程调试Java程序,jdb,IDEA

文章介绍了如何使用JDK1.8进行Java程序的调试,包括启动JVM的调试模式,如使用`java-Xdebug-Xrunjdwp`或`java-agentlib:jdwp`命令,以及客户端通过jdb或IDEA进行远程连接和设置断点。强调了IDEA在远程调试中的便利性,并提供了IntelliJIDEA配置远程调试的步骤。
摘要由CSDN通过智能技术生成

1、我用JDK是1.8 hotspots,java调试的原理是:将JVM看做一个服务器,客户端连接JVM,控制程序的执行,编译java程序时,不需要指定特殊编译选项。

2、启动java虚拟机时,命令行设置为调试模式:

# 适合1.4或更早版本,我的jdk1.8服务端用这种方式启动,IDEA设置的断点无法停住,所以建议用第二种方法(或用配置IDEA时提示的方法):

java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n mytest

# 适合1.5或以后

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 mytest

# 不确定就两种方法都试试

# mytest是编译好的java程序 mytest.class

/*
 * [postgres@qinhvm exp_java]$ cat mytest.java
 * # 编译
 * javac mytest.java
 */
import java.io.*;
import java.util.Scanner;

class mytest {
    public static void main(String[] args) {
        // Declare the variables
        int num;
        // Input the integer
        while(true) {
            System.out.println("Enter the integer: ");
            // Create Scanner object
            Scanner s = new Scanner(System.in);
            // Read the next integer from the screen
            num = s.nextInt();
            num = incr1(num);
            // Display the integer
            System.out.println("Entered integer is: " + num);
        }
    }

    static int incr1(int n) {
        n++;
        return n;
    }
}

3、客户端调试工具连接服务端(jdb,IDEA等)

# 在本机和远程都可以用这个命令

jdb -connect com.sun.jdi.SocketAttach:hostname=192.168.139.153,port=5005 -sourcepath /home/postgres/exp_java

或者

# 在本机试过可以,远程不行

jdb -attach 192.168.139.153:5005 -sourcepath ~/exp_java

4、然后操作类似gdb,设置断点,stop in <函数名>,stop at <java文件:行号>,next,print,threads(查看线程)等,不过最好使用支持java远程调试的IDE工具,例如,IntelliJ IDEA ,如前所述,一般都可以设置远程JVM调试,点击调试按钮连接服务端,然后直接在代码中设置断点,比jdb方便多了。

5、IntelliJ IDEA 配置远程调试java程序

 

如果服务端、客户端配置正确,就会有下面打印

然后在源码中设置断点,再运行服务端 java程序,是代码执行到断点。 

参考:

A Practical Guide to Java Remote Debugging in the Real World (stackify.com)

Remote debugging a Java application - Stack Overflow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值