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. HongYun-ui搭建记录

    vue项目windows环境初始化 Element-ui使用 vue2 页面路由 vue SCSS 在VUE项目中使用SCSS ,对SCSS的理解和使用(简单明了) vue axios vue coo ...

  2. Templates and Default Arguments

    Default parameters for templates in C++: Like function default arguments, templates can also have de ...

  3. sftp 上传下载 命令介绍

    sftp是Secure FileTransferProtocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法. sftp与 ftp有着几乎一样的语法和功能.SFTP为 SSH的一部分 ...

  4. 使用CORS处理跨域请求

    package com.leyou.gateway.config;import org.springframework.context.annotation.Bean;import org.sprin ...

  5. I/O流之字节流

    在程序中所有的数据都是以流的形式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流完成对于操作文件内容,要进行文件内容的操作就需要通过Java提供的 ...

  6. 【HarmonyOS】【xml】使用xml绘制视频播放控制栏

    本文记录HarmonyOS使用xml绘制视频播放控制栏 效果图如下 代码如下 点击查看代码 <?xml version="1.0" encoding="utf-8& ...

  7. SpringCloud技术涵盖简介

    SpringCloud是微服务架构的集大成者,云计算最佳业务实践. 我们平常使用的Spring和他们的关系,对Spring,springboot , SpringCloud 的 概念区分,上图: Sp ...

  8. 服务器安装Centos7

    目录 一.安装 一.安装 1.开启虚拟机后会出现以下界面 Install CentOS 7 安装CentOS 7 Test this media & install CentOS 7 测试安装 ...

  9. Log4j漏洞源码分析

    Log4j漏洞源码分析 这几天Log4j的问题消息满天飞,今天我们就一起来看看从源码角度看看这个漏洞是如何产生的. 大家都知道这次问题主要是由于Log4j中提供的jndi的功能. 具体涉及到的入口类是 ...

  10. Android Service VS AsyncTask VS Thread

    这三种方式的设计目的是不同的. Service: 适用于在后台长期持续运行的动作,如:播放音乐,查看网络数据.注意,在开发文档中,service本身是在UI线程中,所以所需的操作应该创建一个新的线程来 ...