JavaWeb远程调试

2023-10-30

目录

远程调试

Centos

JDK

工程

启动配置

IDE连接

调试

停止调试

远程调试原理

原理

三种通信方式

Debug参数

第1种Socket Attach调试方法

第2种Socket Listen调试方法

第3种调试方法

断点分类

条件断点

异常断点

附录

Tomcat远程调试配置

 1.7之后命令

远程调试底层:JPDA

Tcping ping端口工具

内存和线程监控

Linux后台启动jar

IDEA远程调试


远程调试

Centos

	端口
项目端口:8888
JVM调试端口:8000

	目录:挂载
f:/application1 文件夹

	IP 设置
IP就使用自己机器IP

	创建容器
docker create -it --name application1 -p 8888:8888 -p 8000:8000 -v /f/application1:/opt/application1  centos:6.8 /bin/bash

	启动容器
docker start application1

	进入容器
docker attach application1

JDK

	安装
yum install java-1.8.0-openjdk
	验证
java -version

工程

SpringBoot工程,代码只是为了测试。

URL:http://127.0.0.1:8888/fun1
返回:{"code":1,"message":"ok"}
Jar包名称:demo-0.0.1-SNAPSHOT.jar

@RestController
public class TestConstrller {
	
	private static int count = 0 ;
	
	@GetMapping(value ="/fun1",produces = "application/json;charset=UTF-8")
	@ResponseBody
	public Response fun1(){
		
		System.out.println("-----------------"+(++count)+"---------------------");
		
		System.out.println(1);
		System.out.println(2);
		System.out.println(3);
		System.out.println(4);
		System.out.println(5);
		
		System.out.println("--------------------------------------");
		
		return new Response(count,"ok");
	}
}

启动配置

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=127.0.0.1:8000,suspend=n -jar demo-0.0.1-SNAPSHOT.jar

在程序的JVM启动参数加入如下Debug参数:
-Xdebug 启用调试
-Xrunjdwp 加载JDWP的JPDA参考执行实例
transport 用于在调试程序和JVM使用的进程之间通讯
dt_socket 套接字传输
address=8000调试服务器的端口号,客户端用来连接服务器的端口号
server=y/n JVM是否需要作为调试服务器执行
suspend=y/n 是否在调试客户端建立连接之后启动JVM 。

启动工程:

IDE连接

工程右键 --> Debug --> Debug Configuration --> Remote Java Application

 说明:

  1. 端口是Socket的端口,跟restful中的端口不一致。
  2. 选择的是Eclipse调试,并不是只有Eclipse,Idea也可以。

调试

正常调用,第一次连接的时候可能稍微长点。

调用地址:http://127.0.0.1:8888/fun1

 停止调试

 就注意一点就行了,当鼠标放到下图红框按钮上时出现Disconnect,显然是断开远程连接的按钮。当该按钮亮时说明正在远程debug,当像旁边按钮一样灰色时说明,远程debug连接已经断开。

 
远程调试原理

原理

1.	Java都是编译成class文件,运行在不同环境的JVM之上的
2.	两个JVM之间是可以通信的,协议:JDWP(Java Debug Wire Protocol)
3.	连接方式Socket
4.	连接后 运行的是Eclipse中的Demo工程
5.	原则上两边的代码必须一致,也可以稍微有点差别
6.	下边选择的是Eclipse调试,并不是只有Eclipse,Idea也可以。

三种通信方式

	远程调试Java代码的三种方法,
1.	第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试;
2.	第2种方法可以调试Java程序启动过程,但是Eclipse不能随时连接到远程Java程序进行调试;
3.	第3种方法可以同时具备上面两种的优点,在调试Java程序启动过程后,即使断开后Eclipse还是可以随时连接到远程Java程序进行调试。

在实际使用过程,一般使用第1种调试方法,
在需要调试Java程序启动过程的时候,才会使用第3种方法,
第3种和第1种方法的区别只是在于suspend=y/n,
第2种方法一般很少使用。

	前两种通信图
1.	图片下半部分是第1种Socket Attach类型,调试服务端(被调试远程运行的机器)启动一个端口等待我们(调试客户端)去连接;。
2.	图片上半部分是第2种Socket Listen类型,表示Eclispe调试器先启动监听,JVM启动时主动连接调试器。


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 。

第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种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种调试方法

第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程序无法启动一直在等待。

断点分类

条件断点

定义

当某一个条件成立的时候进入断点。

设置条件断点

  • 先设置普通断点
  • 在普通断点上按住Ctrl+双击
  • 弹出界面,并选中“conditional”

  • 设置条件断点条件,点击确定

  •  另外一种编辑断点属性方式
  • 调试 

http://localhost:8888/fun2

代码

	@GetMapping(value ="/fun2",produces = "application/json;charset=UTF-8")
	@ResponseBody
	public Response fun2(){
		
		System.out.println("------"+(++count)+"----------");
		for(int i = 0 ; i<10;i++){
			System.out.println(i); // 断点 i = 2的时候进入
		}
		system.out.println("-----------------------------");
		
		return new Response(count,"ok");
	}

调试图:

只有i=2的时候才进断点 

异常断点

定义

断点不仅可以设置在某一行,也可以针对整个工程进行设置。

假设你知道程序会在某个地方抛出NullPointerException,可是并不是每一次运行都会出现,就可以为工程设置异常断点。

设置异常断点

调试 

http://localhost:8888/fun3

 附录

Tomcat远程调试配置

Window

startup.bat

在前面添加:SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

一行,不要断开。

 Linux

在catalina.sh中的首行添加:
CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

 启动

启动~看是否弹出信息(一闪而过)

 1.7之后命令

jdk1.7之后使用命令:
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n -jar you-runnable-jar.jar
	jdwp:是 Java Debug Wire Protocol的缩写
	server=y表示是监听其他debugclient端的请求
	address=8000表示服务会在端口号8000监听debug请求,客户端必须设置这个端口号才能进行dubug
	suspend表示是否在调试客户端建立连接之后启动 VM。如果为y,那么当前的VM就是suspend直到有debug client连接进来才开始执行程序。如果你的程序不是服务器监听模式并且很快就执行完毕的,那么可以选择在y来阻塞它的启动。

远程调试底层:JPDA

参考地址

Tcping ping端口工具

ping这个小工具大家都非常熟悉,但是他不能ping端口,当我们需要知道目的地址的某端口是否开放时,这时需要用到这个tcping小工具了,Windows没有自带这个小工具,需要自己下载下来,放到指定目录里面。
下载地址:点击打开链接
放到C:\Windows\System32这个文件夹下,测试如下:

内存和线程监控

配置

java -Djava.rmi.server.hostname=127.0.0.7 -Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=8061  -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar demo-0.0.1-SNAPSHOT.jar

-Djava.rmi.server.hostname 为你的主机ip地址
-Dcom.sun.management.jmxremote.port 为你的端口号,即:连接是需要的端口

jdk的bin目录下打开jvisualvm.exe

连接

主页 

 

 Linux后台启动jar

示例:nohup java -agentlib:jdwp=transport=dt_socket,address=8689,server=y,suspend=n -jar xx.jar  > xx.log 2>&1 &

IDEA远程调试


end 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb远程调试 的相关文章

随机推荐

  • 数学建模美赛E、F题备考策略(自用,大部分复制粘贴)

    这里要讲一下故事的背景 我们小组三个人都是大一大二的学生 我的队友们都是数学专业的学生 所以比赛中的编程部分就交给了我这样的工业工程系的选手 我们在看完了历年赛题后一直认为 前面的几题我们都很难建立出很棒的模型 因此我们将目光对准E F两题
  • 为什么 Redis 中的事物很玄学,没人使用 ?

    1 为什么不使用 Redis 中的事物 Redis 中的事物是 弱事物 它在操作的时候 是将多个命令全部加入到事物队列中 然后通过 exec 命令一次性执行所有命令 这样做的好处是可以减少网络往返的次数 提高效率 它的使用示例如下 Redi
  • 输入英文有空格 解决方法

    shift 空格 直接搞定
  • Uniform convergence

    In the mathematical field of analysis uniform convergence is a mode of convergence of functions stronger than pointwise
  • vue3 + elementplus 教程

    一 初始化 安装 vue cli g 全局安装 vue cli npm install vue cli g 或者 yarn global add vue cli 二 创建项目 vue create 项目名 进行项目初始化 D workspa
  • C# JSON 常用方法 - Json字符串转对象

    创建项目 ConsoleApplication Json 选择项目右键管理NuGet程序包 搜索Newtonsoft Json 并下载安装 选择项目添加 JsonHelper cs 添加引用 using Newtonsoft Json 编写
  • [893]推荐几款提高体验与效率的Chrome插件神器

    今天推荐几款好用的 Chrome 插件 都是我自己一直在用的插件 可以到 Chrome 商店下载 话不多说 进入主题 Insight io For Github 如图 就像这样 可以以文件树的方式浏览 github 的代码文件 Toggle
  • 【注册机】JCreator Pro v4.50.010 注册机

    下载地址 http oyksoft oyksoft com oyksoft com JCreator Pro v4 50 010 Keygen Only HAZE rar
  • OpenCV均值、中值滤波器的讲解及实战应用(附Python源码)

    需要源码和图片请点赞关注收藏后评论区留言私信 在尽量保留原图像信息的情况下 去除图像内噪声 降低细节层次信息等一系列过程 叫作图像的平滑处理 或图像的模糊处理 实现平滑处理最常用的工具就是滤波器 通过调节滤波器的参数 可以控制图像的平滑程度
  • Java通过两点经纬度和范围距离计算范围四个顶点的经纬度

    参考博文 https blog csdn net zengmingen article details 68490497 private static final double mile 1609 344 米 英里换算 通过起点 终点的经纬
  • SQL数据库:数据查询

    数据查询 语句格式 SELECT子句 指定要显示的属性列 FROM子句 指定查询对象 基本表或视图 WHERE子句 指定查询条件 GROUP BY子句 对查询结果按指定序列的值分组 比如说男的一组 女的一组 该属性列值相等的元祖为一个组 通
  • python读入2个正整数a和b_C/C++知识点之C语言解题:读入两个小于100的正整数A和B,计算A+B...

    本文主要向大家介绍了C C 知识点之C语言解题 读入两个小于100的正整数A和B 计算A B 通过具体的内容向大家展示 希望对大家学习C C 知识点有所帮助 题目描述 读入两个小于100的正整数A和B 计算A B 需要注意的是 A和B的每一
  • STC15单片机实战项目 - 项目需求

    以经典的51内核单片机设计一款产品 功能如下 1 采用宏晶的STC15L2K32S2 LQFP32 2k SRAM 32k ROM 目的 选用STC15系列1T的经典51内核单片机 资源丰富 2 设计1个运行指示灯 工作时 间隔1s闪烁 目
  • 人工智能及其在工业领域的三大应用

    人工智能是一门新的技术学科 研究和开发用于模拟人类智慧扩充套件和扩充套件的理论 方法 技术和应用系统 人工智能研究的目标 是让机器执行一些需要智慧人类完成的复杂任务 也就是说 我们希望这台机器能取代我们 解决一些复杂的任务 不仅是重复的机械
  • 数据库系统概论——第九章 关系查询处理和查询优化

    一 关系数据库系统查询处理 1 查询处理步骤 1 查询分析的任务 对查询语句进行扫描 词法分析和语法分析 词法分析 从查询语句中识别出正确的语言符号 语法分析 进行语法检查 2 查询检查的任务 1 合法权检查 根据数据字典检查语句中的数据库
  • 【linux】cpu过高解决方法

    CPU过高情况 1 使用top命令查看cpu的进程占用情况 2 发现11443的进程占比过高 通过top Hp 11443 查看线程的占用情况 发现11459 11460 11461线程的占比过高 解决swap占用CPU 设置vm swap
  • # Linux 升级g++7.5.0

    Linux 升级g 7 5 0 最近使用需要使用c 14标准 发现自己的编译器版本为gcc 4 8 只支持c 11标准 因此进行升级 升级为可以支持c 17的gcc7 5 0 关于编译器的版本支持问题可以到gcc的官方文档进行查询 下面开始
  • 【机器学习杂烩】投票(Voting)算法在分类问题上的应用(一口气实现Logistic 回归、SVM、KNN、C4.5 决策树、 Adaboost、GBDT 和随机森林,并集成起来)

    投票算法简介 投票是在分类算法中广泛运用的集成学习算法之一 投票主要有硬投票和软投票 两种 硬投票即各基分类器权重相同的投票 其原理为多数投票原则 如果基分类器 的某一分类结果超过半数 则集成算法选择该结果 若无半数结果则无输出 软投票 的
  • (一)Windows下tensorflow安装 win64+Python3.5

    2016年11月29日 TF官方宣布0 12版tensorflow支持原生windows操作系统 不在需要通过Docker进行安装 tf初学者 windows重度依赖用户 可以按照下面这种可行的安装方法进行 一 安装Python 1 通过P
  • JavaWeb远程调试

    目录 远程调试 Centos JDK 工程 启动配置 IDE连接 调试 停止调试 远程调试原理 原理 三种通信方式 Debug参数 第1种Socket Attach调试方法 第2种Socket Listen调试方法 第3种调试方法 断点分类