jvm之远程调试

news2024/11/20 14:42:11

写在前面

工作中,有时会出现测试环境有问题,本地却正常的情况,此时我们就可以通过JVM提供的远程调用的功能,实现在本地debug调试测试环境代码。

1:例子1直接运行class

首先我们来定义类:

package com.feng.map.demo;
import java.util.*;

public class MapMain {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("aa", "aa");
        map.put("bb", "bb");
        map.put("cc", "cc");
        map.put("dd", "dd");
        map.put("ff", "f");
 
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            System.out.println(entry.getKey() + " ------ " + entry.getValue());
        }
    }
}

接着使用如下命令启动,开启JVM远程debug接口:

D:\test>javac -d . MapMain.java

D:\test>java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=9093 com.feng.map.demo.MapMain
Listening for transport dt_socket at address: 9093

这样当前启动的JVM虚拟机就会通过9093端口来监听服务调用了,接着我们配置idea的remote debug功能,如下:

在这里插入图片描述

然后我们运行上图配置的remotemap,就可以进行调试远端代码了,如下:

在这里插入图片描述

2:运行jar

自己准备一个可以执行的jar包,我这里是一个基于springboot的项目,如下方式启动:

D:\test>D:\\program_files\\jdk-17.0.1\\bin\\java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=9093 pricing-0.0.1-SNAPSHOT.jar
Listening for transport dt_socket at address: 9093
11:25:40,036 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.5
11:25:40,059 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
11:25:40,061 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
11:25:40,063 |-INFO in ch.qos.logback.classic.BasicConfigurator@1165b38 - Setting up default configuration.
11:25:40,694 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@4c12331b - URL [jar:file:/D:/test/pricing-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/logback-boot.xml] is not of type file
...

然后在idea中配置远程关联到本地源码,从而在本地debug,如下:

在这里插入图片描述

然后我们在想要debug的位置打上断点,如下:

在这里插入图片描述

接着访问远端服务器接口,就可以开始debug本地的代码了,如下:

在这里插入图片描述

3:部署到Tomcat

参考这篇文章 准备测试项目,之后先使用idea启动,之后会在CATALINA_BASE中生成项目对应的war的解压包,接下来我们测试如下命令是否能够启动注意你本地目录和我不一样

set "CATALINA_BASE=C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\Unnamed_test-remote-debug_2" && set "CATALINA_HOME=D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66" && set "CATALINA_TMPDIR=D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66\temp" && set "JRE_HOME=D:\program_files\jdk1.8.0_202" && set "CLASSPATH=D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66\bin\bootstrap.jar;D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66\bin\tomcat-juli.jar" && D:\\program_files\\apache-tomcat-8.5.66-windows-x64_tmp\\apache-tomcat-8.5.66\\bin\\catalina.bat run

这样就说明我们配置成功了,之后我们需要配置Tomcat启动的时候启用远程debug的能力,打开catalina.bat搜索if not ""%1"" == ""run"" goto mainEntry在其上增加如下内容:

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

接着使用上述命令启动,输出如下内容则说明配置成功:

C:\Windows\System32>set "CATALINA_BASE=C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\Unnamed_test-remote-debug_2" && set "CATALINA_HOME=D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66" && set "CATALINA_TMPDIR=D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66\temp" && set "JRE_HOME=D:\program_files\jdk1.8.0_202" && set "CLASSPATH=D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66\bin\bootstrap.jar;D:\program_files\apache-tomcat-8.5.66-windows-x64_tmp\apache-tomcat-8.5.66\bin\tomcat-juli.jar" && D:\\program_files\\apache-tomcat-8.5.66-windows-x64_tmp\\apache-tomcat-8.5.66\\bin\\catalina.bat run
...
Using CATALINA_OPTS:   "-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
Listening for transport dt_socket at address: 8000
05-May-2023 13:56:25.016 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本: Apache Tomcat/8.5.66
...

然后配置JVM remote,如下:

在这里插入图片描述

写在后面

参考文章列表

tomcat intellij远程调试 。

JVM远程调试功能开启,与原理 。

springmvc之编程步骤 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blender 形变类修改器:曲线

目录 形变类修改器1. 测试一&#xff1a;减少环切数量1.1 调整物体原点1.2 让两个物体原点重合1.3 添加曲线修改器1.4 融并边 2. 测试二&#xff1a;曲线的方向2.1 查看曲线的方向&#xff08;曲线法向显示&#xff09;2.2 在3D空间调整曲线 3. 测试三&#xff1a;空间位置的影…

【Minecraft开服教学】使用 MCSM 面板一键搭建我的世界服务器 并使用内网穿透公网远程联机

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 转载自远程穿透文章&…

C语言中链表经典面试题目

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

MySQL之Change Buffer详解

前言 本文已收录在MySQL性能优化原理实战专栏&#xff0c;点击此处浏览更多优质内容。 上一篇文章一文带你了解MySQL数据库InnoDB_Buffer_Pool&#xff08;点击跳转&#xff09;我们学习了InnoDB Buffer Pool的工作原理&#xff0c;其作用是减少MySQL读取数据时直接与磁盘打交道…

百趣代谢组学党参远志散对记忆障碍大鼠学习能力和肠道菌群的影响

文章标题&#xff1a;Effects of Dangshen Yuanzhi Powder on learning ability and gut microflora in rats with memory disorde 发表期刊&#xff1a;Journal of Ethnopharmacology 影响因子&#xff1a;5.195 作者单位&#xff1a;山西中医药大学 百趣提供服务&#xf…

什么是元宇宙数字展厅?元宇宙前景如何 ?

元宇宙是一个近年来备受关注的概念&#xff0c;它被认为是未来数字世界的新形态。元宇宙是一个虚拟的、数字化的世界&#xff0c;它可以模拟现实世界的各种物理、社会和经济系统&#xff0c;同时也可以融合人工智能、虚拟现实等前沿技术&#xff0c;为用户提供更加丰富、多样化…

钴基双金属氧化物储能材料的高效制备和电化学应用

一、引言 钴金属氧化物作为一类典型的储能材料&#xff0c;既可以用于锂离子电池负极材料&#xff0c;又可以用于超级电容器电极材料&#xff0c;因而备受关注 。在作为锂离子电池负极材料时&#xff0c;具有较高的理论比容量&#xff0c;但充放电体积变化较大、材料导电性较差…

十、MyBatis的缓存

文章目录 十、MyBatis的缓存10.1 MyBatis的一级缓存场景1&#xff1a;判断同一个sqlSession是否查询1级缓存&#xff0c;答案&#xff1a;会查询1级缓存场景2&#xff1a;判断不同sqlSession是否查询1级缓存&#xff0c;答案&#xff1a;不会查询1级缓存场景3&#xff1a;判断相…

企业服务管理(ESM)工具

什么是企业服务管理 企业服务管理 (ESM) 是 IT 服务管理(ITSM)原则的延伸&#xff0c;旨在为人力资源 (HR)、法律、设施、营销和财务等业务团队提供更好的服务。ITSM 是 IT 团队管理向客户提供端到端 IT 服务的方式。ESM 的一个例子是建立一个可供整个组织所有团队使用的服务台…

LED显示屏周边设备

LED显示屏市场也呈多元化发展&#xff0c;异型屏、灯条屏、透明屏、小间距等应用新产品的出现无疑不是一种技术创新。以上创新技术的应用&#xff0c;对LED显示屏周边设备生产企业也提出了更高要求。因此&#xff0c;周边设备对推动整个LED显示屏的产业发展起着举足轻重、不可或…

【Linux-进程通信1】管道

&#x1f308;进程间通信介绍 &#x1f344;进程间通信目的 在操作系统中&#xff0c;每个进程都是独立运行的&#xff0c;它们有自己的地址空间和资源&#xff0c;它们不能直接访问其他进程的资源。然而&#xff0c;在现代计算机系统中&#xff0c;很少有一个进程能够独立完成…

yolov5读取单通道图像会怎样?

通过上图打印可知输入是固定3通道&#xff0c;那么意味着在读取图像中会对图像进行处理。 opencv在默认情况下会读取3个通道的图像&#xff0c;如果是灰度图会将图层复制三次(BGR缺省&#xff0c;BGR)&#xff0c;因此读出来的图片是三通道。

xcode打包导出ipa

转载&#xff1a;xcode打包导出ipa 众所周知&#xff0c;在开发苹果应用时需要使用签名&#xff08;证书&#xff09;才能进行打包安装苹果IPA&#xff0c;作为刚接触ios开发的同学&#xff0c;只是学习ios app开发内测&#xff0c;并没有上架appstore需求&#xff0c;对于苹果…

【Mybatis】Mybatis之xml开发—用户角色权限关联案例

目录 要求&#xff1a;使用xml开发完成需求查询。 数据库 需求 要求&#xff1a;使用xml开发完成需求查询。 数据库 -- 用户表 create table sys_user(user_id int primary key auto_increment comment 用户ID,user_name varchar(50) comment 用户名,password varchar(32)…

软件测试——性能指标

登录功能示例&#xff1a; 并发用户数500&#xff1b; 响应时间2S&#xff1b; TPS到500&#xff1b; CPU不得超过75%&#xff1b; 性能指标有哪些&#xff1f; 响应时间 并发用户数 TPS CPU 内存 磁盘吞吐量 网络吞吐量 移动端FPS 移动端耗电量 APP启动时间 性能…

windows11 安装多个mysql8

安装一个mysql请参考&#xff1a;windows系统安装mysql8 解压缩版安装顺序_csdn_aspnet的博客-CSDN博客 下载mysql&#xff1a;MySQL :: Download MySQL Community Server 下载后解压到你指定的目录&#xff0c;我下载的非最新版&#xff0c;如图&#xff1a; 在文件夹下面建一…

【SpringMVC】| 控制器异常处理机制及实现流程

MVC目录 一. &#x1f981; 前言二. &#x1f981; 控制器异常处理Ⅰ. 单个控制器异常处理Ⅱ. 全局异常处理Ⅲ. 自定义异常处理 三. &#x1f981; 最后 一. &#x1f981; 前言 咱们来探索一下控制器异常处理流程&#xff0c;以及如何来实现它。 二. &#x1f981; 控制器异…

烈日炎炎的夏天骑行,怎么预防中暑及中暑后怎么处理?

随着天气的逐渐炎热&#xff0c;夏季骑行逐渐成为了人们喜爱的一项运动。但是&#xff0c;在享受骑行乐趣的同时&#xff0c;我们也要时刻关注身体健康&#xff0c;预防中暑等意外情况的发生。下面&#xff0c;本文将从多个角度为大家讲解夏季骑行中暑的预防和处理方法。 一、选…

音频环回实验

音频环回实验 一、WM8978简介 WM8978是一个低功耗、高质量的立体声多媒体数字信号编译码器&#xff0c;它结合了一个高质量的立体声音DAC和ADC&#xff0c;带有灵活的音频线输入、麦克风输入和音频输出处理 WM8978内部有58个寄存器。每一个寄存器的地址位为7位&#xff0c;数…

SpringCloud基础知识

1、什么是SpringCloud SpringCloud分布式微服务架构的一站式解决方案&#xff0c;是多种微服务架构落地技术的集合体&#xff08;微服务全家桶&#xff09;。 查看官网&#xff1a;https://spring.io/ Spring Cloud本身不是新的框架&#xff0c;是一个全家桶式的技术栈&…