以调试模式启动Java应用也很简单,只需要加上调试参数即可:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 Test
这个时候程序会处于等待状态(光标会一致闪烁,等待远程连接):
4.1 有源码调试
假设我们有需要调试的应用程序代码,我们可以直接在Java类上设置断点即可调试。
示例 - Test.java:
/**
* Creator: yz
* Date: 2020-05-19
*/
public class Test {
public static void main(String[] args) {
System.out.println(args);
}
}
在待调试的程序点设置断点,并点击IDEA Debug
配置:
这个时候就可以看到程序已经运行至断点的位置了:
4.2 无源码,只有jar或者class文件调试
如上示例,假设我们这个时候只有Test.class的class文件或者Test.class对应的test.jar
文件,我们应该怎么调试呢?
只有class的情况下我们进入源码所在的包,然后打包成jar文件即可:
cd src
jar -cvf test.jar *
ls -la
命令执行结果:
已添加清单
正在添加: Test.class(输入 = 342) (输出 = 187)(压缩了 45%)
[yz@yz:src]$ ls -la
total 16
drwxr-xr-x 4 yz staff 128 May 19 17:21 .
drwxr-xr-x 5 yz staff 160 May 19 16:57 ..
-rw-r--r-- 1 yz staff 342 May 19 17:20 Test.class
-rw-r--r-- 1 yz staff 641 May 19 17:22 test.jar
这个时候统计目录就会生成一个test.jar
,我们只需要把这个jar添加到classpath
然后设置好断点就可以调试了。
添加jar
到IDEA
的classpath
,可以直接选择jar目录或者jar文件然后右键Add as Library
,也可以选择项目以外的目录或者jar文件。
示例 - 直接选择项目中的jar:
示例 - 选择项目以外的jar:
选择jar
需要添加的classpath
信息,通常不需要修改:
启动Test示例:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -cp test.jar Test
展开test.jar
并在Test.class中设置断点,最后点击工具栏的调试按钮即可调试: