Idea 远程调试

Idea 远程调试

本文主要介绍Idea远程调试java程序。

一、原理

远程调试的原理就是两个VM之间通过debug协议进行通信,两者之间通过socket进行通信。

二、实现

2.1 添加JVM参数

在启动JVM时加入参数

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

这是java 1.4 以后的参数,之前版本的参数不一样,由于java1.4之前的版本不常见了,这里就不做介绍了。
各参数含义如下:
- transport :调试程序和VM之间的通信方式, dt_socket 表示用套接字传输
- server=y : 表示是监听其他debugclient端的请求
- suspend : 表示是否在调试客户端建立连接之后启动 VM。
+ 如果为y,那么当前的VM就是suspend直到有debug client连接进来才开始执行程序
+ 如果为n,那么当前的VM就会直接执行,不会等待debug client连接进来
- address=5005 : 表示端口是5005

实例:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=9999  -jar helloworld.jar 

2.2 用Idea调试

在Idea中,选择Run -> edit Configurations -> “+” -> remote ,配置以下选项:
- Name : 可以随意设置,作为一个标识就好
- Host : 远程机器的host
- Port : 远程JVM启动时指定的address的值,即调试服务器的监听端口

2.3 开始调试

2.3.1 先运行java程序

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=9999  -jar helloworld.jar 

2.3.2 启动Idea调试

点击Run -> Debug’{YOUR_DEBUG_NAME}’
- YOUR_DEBUG_NAME 就是2.2中指定的Name

三、注意事项

  • 如果suspend选项选择的是n,而程序不是长期执行,或者短时间内就会经过所有断点。这会出现问题:Idea还没开始监听,程序就运行完了,达不到调试的目的。这种情况下应该选择suspend=y
  • 如果是一个长时间运行的程序,比如tomcat中长期监听的JVM进程,可以选择suspend=n,这样在调试程序启动之前,JVM程序能完成一些初始化等工作。

你可能感兴趣的:(java)