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启动时主动连接调试器。

EclipseDebugType

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的调试配置界面,如下:

SocketAttach

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的调试配置界面,如下:

SocketListen

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的一种方法

Eclipse远程调试Java代码的三种方法的更多相关文章

  1. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  2. YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法

    上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...

  3. 斐波那契数列-java编程:三种方法实现斐波那契数列

    题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...

  4. MYSQL添加远程用户或允许远程访问三种方法

    添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...

  5. 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 ...

  6. 痞子衡嵌入式:大话双核i.MXRT1170之在线联合调试双核工程的三种方法(IAR篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下在线联合调试双核工程的方法(基于IAR). 前段时间痞子衡写过一篇<双核i.MXRT1170之单独在线调试从 ...

  7. (PASS)JAVA数组去重 三种方法 (不用集合)

    第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...

  8. {转}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 ...

  9. 使用 Eclipse 远程调试 Java 应用程序

    Eclipse 中的远程调试特性 Eclipse 是一个图形化 Java 调试器前端.JDI 在 org.eclipse.jdt.debug 包中实现.本文不详细讨论 JDI 实现.参见 参考资料 获 ...

随机推荐

  1. GO 时间处理

    比较大小 比较大小 先把当前时间格式化成相同格式的字符串,然后使用time的Before, After, Equal 方法即可. time1 := "2015-03-20 08:50:29& ...

  2. Android: EditText设置属性和设置输入规则

    1.EditText输入限制规则 在xml:EditText 设置属性 android:digits="ABCDE123&*" ABCDE123&*是你的限制规则 ...

  3. LocalDate计算两个日期相差天数

    import org.apache.commons.lang.StringUtils; import java.time.LocalDate; import java.time.ZoneId; imp ...

  4. 令无数程序员加班的 Log4j2 远程执行漏洞复现

    前情提要 Apache 存在 Log4j 远程代码执行漏洞,将给相关企业带来哪些影响?还有哪些信息值得关注? 构建maven项目引入Log4j2 编写 pom 文件 <?xml version= ...

  5. C#.NET编程小考30题错题纠错

    1)以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格式化器的Serialize()和Deserialize()方法可以分别用来实现 ...

  6. Jenkins安全加固

    1.jenkins未授权访问 描述 jenkins不当配置可导致未授权访问管理控制台,可以通过脚本命令行执行系统命令.通过该漏洞,可以后台管理服务,通过脚本命令行功能执行系统命令,如反弹shell,w ...

  7. 安装Google BBR加速

    目录 一.简介 二.安装 三.设置BBR 一.简介 Google BBR 是一款免费开源的TCP拥塞控制传输控制协议, 可以使Linux服务器显著提高吞吐量和减少TCP连接的延迟. 二.安装 1.yu ...

  8. epoll 使用详解

    epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就是e ...

  9. python selenium 多账户自动登入163邮箱

    pycharm一些快捷键: ' ctrl ' +' / ' :注释 ' Tab ' :同时缩进 ' shift ' +' Tab ' :左移 一次缩进 本文webinfo.txt路径:C:\Pytho ...

  10. HMS Core版本发布公告

    新增动作捕捉能力.通过简单拍摄即可获得人体3D骨骼关键点数据,广泛应用于虚拟形象.体育运动和医学分析等场景: 3D物体建模能力iOS版本上线. 查看详情>> 新增道路吸附能力.可根据坐标点 ...