Eclipse远程调试Java代码的三种方法
Eclipse远程调试Java代码的三种方法,
第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试,
第2种方法可以调试Java程序启动过程,但是Eclipse不能随时连接到远程Java程序进行调试,
第3种方法可以同时具备上面两种的优点,在调试Java程序启动过程后,
即使断开后Eclipse还是可以随时连接到远程Java程序进行调试。
在实际使用过程,一般使用第1种调试方法,
在需要调试Java程序启动过程的时候,才会使用第3种方法,
第3种和第1种方法的区别只是在于suspend=y/n,
第2种方法一般很少使用。
1.Java程序开启远程Debug
在程序的JVM启动参数加入如下Debug参数:
-Xdebug -Xrunjdwp:transport=dt_socket,address=1088,server=y,suspend=n
参数说明:
-Xdebug 启用调试
-Xrunjdwp 加载JDWP的JPDA参考执行实例
transport 用于在调试程序和JVM使用的进程之间通讯
dt_socket 套接字传输
address=1088 调试服务器的端口号,客户端用来连接服务器的端口号
server=y/n JVM是否需要作为调试服务器执行
suspend=y/n 是否在调试客户端建立连接之后启动JVM 。
2.Eclipse远程调试Java代码的前2种方法
下面的图表示的是Eclipse调试的两种类型,
图片下半部分是第1种Socket Attach类型,表示远程程序正常运行,允许Eclipse调试器随时连接到JVM,
图片上半部分是第2种Socket Listen类型,表示Eclispe调试器先启动监听,JVM启动时主动连接调试器。

2.1.第1种Socket Attach调试方法
远程JVM的Debug参数配置:
-Xdebug -Xrunjdwp:transport=dt_socket,address=1088,server=y,suspend=n
注意suspend=n,表示立即启动JVM,不等待调试客户端建立连接。
Eclipse调试器配置:
Eclipse -> Run -> Debug Configurations... -> Remote Java Application -> 右键点击New
打开一个默认名为New_configuration的调试配置界面,如下:

Connection Type: Socket Attach
Host: localhost (远程Java程序所在的主机IP)
Port: 1088 (远程Java程序的调试端口)
点击Debug即可连接到已经启动的远程Java程序进行调试,
但是不能调试Java程序启动过程。
2.2.第2种Socket Listen调试方法
远程JVM的Debug参数配置:
-agentlib:jdwp=transport=dt_socket,suspend=y,address=192.168.0.1:1088
注意address需要填写Eclipse调试器所在的IP地址和Port端口。
Eclipse -> Run -> Debug Configurations... -> Remote Java Application -> 右键点击New
打开一个默认名为New_configuration的调试配置界面,如下:

Connection Type: Socket Listen
Port: 1088 (远程调试端口)
点击Debug先启动Eclipse监听,
然后启动远程JVM程序,会主动Eclipse调试器进行调试,
这种方法可以调试Java程序启动过程,
但是不能随时连接到远程java程序进行调试。
3.第三种调试方法
第三种调试方法和第1中调试方法类似,
区别在于远程JVM的Debug参数中suspend=y:
-Xdebug -Xrunjdwp:transport=dt_socket,address=1088,server=y,suspend=y
具体流程是先启动远程的Java程序,
但此时JVM不会真正启动,会等待调试客户端建立连接之后再启动JVM,
然后参考第一种方法启动Eclipse的Socket Attach类型调试器,
此时JVM会真正的启动,而且已经连接上Eclipse的调试器,
可以调试Java程序启动过程,而且即使断开后,
Eclipse还是可以随时连接到远程Java程序进行调试,
缺点在于必须启动Eclipse调试器监听,
否则会导致JVM程序无法启动一直在等待。
4.参考文章
Eclipse远程调试Java代码的三种方法的更多相关文章
- 【Android】Eclipse自动编译NDK/JNI的三种方法
[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...
- 斐波那契数列-java编程:三种方法实现斐波那契数列
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...
- MYSQL添加远程用户或允许远程访问三种方法
添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...
- HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法
HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...
- 痞子衡嵌入式:大话双核i.MXRT1170之在线联合调试双核工程的三种方法(IAR篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下在线联合调试双核工程的方法(基于IAR). 前段时间痞子衡写过一篇<双核i.MXRT1170之单独在线调试从 ...
- (PASS)JAVA数组去重 三种方法 (不用集合)
第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...
- {转}Java 字符串分割三种方法
http://www.chenwg.com/java/java-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%86%E5%89%B2%E4%B8%89%E7%A7%8D%E6%9 ...
- 使用 Eclipse 远程调试 Java 应用程序
Eclipse 中的远程调试特性 Eclipse 是一个图形化 Java 调试器前端.JDI 在 org.eclipse.jdt.debug 包中实现.本文不详细讨论 JDI 实现.参见 参考资料 获 ...
随机推荐
- URL+http协议
- d3动态坐标轴
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java Spring 自定义事件监听
ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...
- 在Eclipse中运行OSGI工程出错的解决方案
今天学习OSGI的过程中按照书上所述搭建好第一个helloworld插件工程,运行的过程中出现下面所示的错误: !SESSION 2014-06-09 21:04:49.038 ----------- ...
- 推荐2个Mac OS X上的JSON工具
原文:http://www.giser.net/?p=887 1 visual JSON 能够将JSON串以列表的方式展示,方便对JSON数据的解析. 2 JSONModeler 可以解析JSON串生 ...
- IM服务器:编写一个健壮的服务器程序需要考虑哪些问题
如果是编写一个服务器demo,比较简单,只要会socket编程就能实现一个简单C/S程序,但如果是实现一个健壮可靠的服务器则需要考虑很多问题.下面我们看看需要考虑哪些问题. 一.维持心跳 为何要维持心 ...
- 使用docker-compose一起安装kafka(zookeeper)
要先安装docker-compose Linux安装docker-compose 参考:https://www.cnblogs.com/pxblog/p/15049362.html 创建docker- ...
- centos7使用Dockerfile运行mysql库并初始化数据
Dockerfile文件(文件名一定要这个) FROM mysql:5.7 WORKDIR /docker-entrypoint-initdb.d ENV LANG=C.UTF-8 ADD test. ...
- centos使用docker安装redis ,并设置外网访问
拉取镜像 docker pull redis:4.0 在主机/data/redis/conf目录下新建redis.conf文件vim /data/redis/conf/redis.conf # Red ...
- 使用mysql查询语句统计数据,如果是null值则赋值为0
select IFNULL(sum(total_view),0) from 如果统计total_view这列为null ,则返回默认值0