Intellij IDEA远程debug教程实战和要点总结

远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。

JAVA支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系,本地的Java文件在远程JVM建立联系和通信。此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然。

本机Intellij IDEA远程调试配置

img

1,打开Inteliij IDEA,顶部菜单栏选择Run-> Edit Configurations,进入下图的运行/调试配置界面。

2,点击左上角’+'号,选择Remote。分别填写右侧三个红框中的参数:Name,Host(想要指定的远程调试端口)。

3,点击界面右下角应用按钮即可。

二,服务器端开启调试模式,增加JVM启动参数,以支持远程调试

服务器端的catalina.sh文件,在Tomcat的安装目录下,复制到本地,进行编辑,在第一行添加参数配置如下,完成后粘贴回去。

img

文本:

CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8089"

配置添加之后,重启tomcat即可生效(shutdown.sh /startup.sh)。到此,开始远程调试。

三, Intellij IDEA 启动远程调用

最后,打开IDEA,程序上打上断点,运行模式选远程,点击运行。调用服务器端运行的系统程序,系统自动进入断点

img

img

4,为什么可以进行远程调试,背后的原理是什么?

首先,了解下的Java程序的执行过程- 分为以下几个步骤:Java的文件 - - 编译生成的类文件(class文件) - - JVM加载类文件 - - JVM运行类字节码文件 - - JVM翻译器翻译成各个机器认识的不同的机器码。

远程调试原理

众所周知,Java 程序是运行在Java 虚拟机(JVM )上的,具有良好跨平台性,是因为Java程序统一以字节码的形式在JVM中运行,不同平台的虚拟机都统一使用这种相同的程序存储格式。因为都是类字节码文件,只要本地代码和远程服务器上的类文件相同,两个JVM通过调试协议进行通信(例如通过插座在同一个端口进行通信),另外需要注意的时,被调试的服务器需要开启调试模式,服务器端的代码和本地代码必须保持一致,则会造成断点无法进入的问题。

Java的调试器架构

img

这个架构其实质还是JVM,只要确保本地的Java的源代码与目标应用程序一致,本地的Java的源码就可以用插座连接到远端的JVM,进而执行调试。因此,在这种插座连接模式(下文介绍)下,本地只需要有源码,本地的Java的应用程序根本不用启动。

传输方式,默认为Socket ;

套接字:MACOS,Linux的系统使用此种传输方式;

共享内存:WINDOWS系统使用此种传输方式。

调试模式,默认为Attach ;

Attach :此种模式下,调试服务端(被调试远程运行的机器)启动一个端口等待我们(调试客户端)去连接;

Socket :此种模式下,是我们(调试客户端)去监听一个端口,当调试服务端准备好了,就会进行连接。

配置属性说明补充

1.idea的的服务的开启调试模式设置详细说明,

img

文本:

CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8089"

2.各参数解释:

  • -Xdebug:通知JVM工作在调试模式下
  • -Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境。参数同时有一系列的调试选项:
  • session:指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另外dt_shmem指用共享内存方式,其中dt_shmem只适用于窗口平台.server 参数是指是否支持在服务器模式的虚拟机中。
  • onthrow:指明当产生该类型的异常时,JVM就会中断下来,进行调式该参数任选。
  • release:指明当JVM被中断下来时,执行的可执行程序该参数可选
  • suspend<:指明:是否在调试客户端建立起来后,再执行 JVM。
  • onuncaught(= y或n)指明出现未捕获的异常后,是否中断JVM的执行。

3.IDEA设置远程属性说明,以下为谷歌翻译

img

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

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

相关文章

Idea进行远程Debug

Idea远程调试 当把一个本地项目部署到远程服务器后有可能出现意想不到错误&#xff0c;这个时候通过远程调试能够更清楚的找到bug所在位置。本篇主要讲解如何使用Idea开发工具 进行调试1.远程调试服务器上面的SpringBoot 项目2.远程调试服务器上运行在tomcat中的项目&#xff…

matlab表示DFT和DTFT,【 MATLAB 】离散傅里叶级数(DFS)与DFT、DTFT及 z变换之间的关系...

上篇博文我们简单的讨论了离散傅里叶级数DFS和离散傅里叶变换DFT之间的关系&#xff0c;简单地说&#xff0c;DFT就是DFS在一个周期内的表现。为了后面讨论方便&#xff0c;这里给出DFS的系数公式(分析公式)&#xff1a;(1) 其中&#xff1a;综合公式&#xff1a;(2) 为了对比&…

php分列显示,【杂谈】PHP数组怎样按键名完成降序分列

PHP关联数组按键名完成降序分列&#xff0c;我们能够直接经由过程PHP中的krsor()函数来完成。krsort函数示意对数组根据键名逆向排序。那末在前面的文章中&#xff0c;已给人人引见过PHP关联数组按键名完成升序分列的要领。下面我们继承连系简朴的示例&#xff0c;给人人引见PH…

spike 序列matlab,SPKtool1.0.1 神经信号spike 分类及处理 工具包 matlab 238万源代码下载- www.pudn.com...

文件名称: SPKtool1.0.1下载收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 937 KB上传时间: 2013-03-05下载次数: 3提 供 者: 无语详细说明&#xff1a;神经信号spike 分类及处理 工具包-A toolbox for neurophysiological data processing文件列表(点击判断是否您需要的…

cuda加速求解龙格库塔四阶五步积分

一般代码使用cuda加速的方法&#xff1a; 使用PyTorch进行加速&#xff1a; 首先&#xff0c;你需要将你的ODE系统定义为PyTorch模型&#xff0c;这样可以利用PyTorch的自动微分功能和GPU加速。然后&#xff0c;你需要将数据和参数转换为PyTorch张量&#xff0c;并将它们移动到…

Idea怎么实现画类图

1.【file】-【Settings】-【Tools】-【Diagrams】-勾选Java Class Diagram的选项 2.右击类&#xff0c;【Diagrams】-【Show Diagram】

如何在linux下创建一个可运行shell脚本?

linux系统下&#xff0c;经常会用到自启动脚本&#xff0c;那么如何新建一个自启动脚本&#xff1f; 工具/原料 linux系统 方法/步骤 1 新建一个.sh文件&#xff0c;touch test.sh 2 编辑test.sh文件&#xff0c;vi test.sh 然后键入i&#xff0c;输入内容&#xff0c; #!…

TCP 协议(包含三次握手,四次挥手)

文章目录1.确认应答机制 (ACK)2.超时重传3.1建立连接 - 三次握手 ▲3.2.断开连接 - 四次挥手 ▲1.确认应答机制 (ACK) 确认应答是可靠传输的最核心机制 接收方反馈一个应答报文(ACK)&#xff0c;表示已收到 假设现在 A 想去 B 家里玩游戏&#xff0c;于是 A 给 B 发消息&…

Redis使用单线程却快到飞起的原因

文章目录Redis为什么用单线程&#xff1f;多线程的开销Redis使用单线程为什么还这么快&#xff1f;网络与IO操作的潜在阻塞点基于多路复用的高性能IO模型回调机制Redis的性能瓶颈点其他Redis相关的有趣问题1. 为什么要用Redis&#xff0c;直接访问内存不好吗&#xff1f;2. 数据…

线程池参数到底要怎么配?

文章目录1 线程池快速回顾2 现有设置参数的方法及不足3 如何设置核心线程数&#xff08;corePoolSize&#xff09;4 如何设置最大线程数&#xff08;maxPoolSize&#xff09;5 如何改变等待队列长度想必大家对Java里面线程池&#xff08; 类&#xff09;一定不陌生吧&#xff0…

彻底搞懂Cookie、Session、JWT和Token

文章目录引入&#xff1a;http是一个无状态协议&#xff1f;怎么解决呢&#xff1f;一、Cookie和Session1.1 cookie 注意事项&#xff1a;1.2 cookie 重要的属性1.3 session 注意事项&#xff1a;1.4 Cookie 和 Session 的区别&#xff1a;二、token&#xff08;令牌&#xff0…

你真的知道什么是多线程吗?为什么要学习多线程?

文章目录1、多线程的含义2、原理3、优势4、线程与进程的区别5、线程与多线程的区别6、线程调度的分类7、同步与异步8、并发与并行9、为什么要使用线程池10、线程池的好处11、线程池的分类12、意义1、多线程的含义 多线程&#xff08;multithreading&#xff09;&#xff0c;是…

oracle 表关联索引优化,Oracle执行计划调优-超级大表关联超级小表的性能调优

今日客户现场出现一个查询SQL异常慢的情况。用时分钟级别。SELECT *FROM (SELECT a1.*, rownum rnFROM (SELECT openOrder2017.exchId,............openOrder2017.internalbizmark,customer.typeIdListFROM openOrder2017, customerWHERE openOrder2017.custId customer.custI…

Common Sort - 排序 - Java

文章目录排序概念稳定性&#xff08;重要&#xff09;应用 - 举例1.、各大商城的价格从低到高等2、中国大学排名常见的排序算法&#xff08;8 种&#xff09;- 总览直接插入排序模拟实现 - 插入排序稳定性分析结论希尔排序思考原理科学家的分组思维模拟实现 - 希尔排序总结选择…

linux的运行级别如何更改成6,把Linux运行级别设置为6后如何解决的经验分享

我们知道&#xff0c;Linux有7个运行级别&#xff0c;而运行级别设置为6后&#xff0c;会导致Linux系统刚启动完成就立刻重启&#xff0c;重启后又会立刻重启&#xff0c;如此反复&#xff0c;导致系统不能正常运行。本文笔者和大家分享一下误把Linux运行级别设置为6后如何解决…

Redis五种数据结构应用场景

文章目录前言二、字符串String2.1、常用操作2.2、应用场景2.2.1、单值缓存&#xff08;最常用&#xff09;2.2.2、对象缓存2.2.3、分布式锁2.2.4、计数器三、哈希hash3.1、常用操作3.2、应用场景3.2.1、对象缓存3.2.2、 电商购物车四、列表list4.1、常用操作4.2、应用场景4.2.1…

IntelliJ IDEA中的神仙插件

文章目录1. Alibaba Java Coding Guidelines2.GsonFormat3.A8Translation4.Maven Helper5.Free Mybatis plugin6.Grep Console7.Lombok8.Nyan progress bar9.FindBugs-IDEA10.Key Promoter X11.JavaDoc12.ignore13.RainbowBrackets14.Activate-power-mode15.CodeGlance16.Gener…

linux 远程拒绝服务,Linux Kernel SCTP远程拒绝服务漏洞

发布日期&#xff1a;2011-08-30更新日期&#xff1a;2011-08-30受影响系统&#xff1a;Linux kernel 2.6.x描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 49373CVE ID: CVE-2011-2482Linux Kernel是Linux操…

SpringBoot使用Websocket

webSocket是HTML5的一种新协议&#xff0c;它实现了服务端与客户端的全双工通信&#xff0c;建立在传输层&#xff0c;tcp协议之上&#xff0c;即浏览器与服务端需要先建立tcp协议&#xff0c;再发送webSocket连接建立请求。webSocket的连接&#xff1a;客户端发送请求信息&…

Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)

Springboot整合Websocket遇到的坑 一、使用Springboot内嵌的tomcat启动websocket 1.添加ServerEndpointExporter配置bean Configuration public class WebSocketConfig {/*** 服务器节点** 如果使用独立的servlet容器&#xff0c;而不是直接使用springboot的内置容器&#x…