Intellij IDEA远程debug教程实战和要点总结
远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。
JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系,本地的Java文件在远程JVM建立联系和通信。此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然。
本机Intellij IDEA远程调试配置
1,打开Inteliij IDEA,顶部菜单栏选择Run-> Edit Configurations,进入下图的运行/调试配置界面。
2,点击左上角'+'号,选择Remote。分别填写右侧三个红框中的参数:Name,Host(想要指定的远程调试端口)。
3,点击界面右下角应用按钮即可。
二,服务器端开启调试模式,增加JVM启动参数,以支持远程调试
服务器端的catalina.sh文件,在Tomcat的安装目录下,复制到本地,进行编辑,在第一行添加参数配置如下,完成后粘贴回去。
文本:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8089"
配置添加之后,重启tomcat即可生效(shutdown.sh /startup.sh)。到此,开始远程调试。
三, Intellij IDEA 启动远程调用
最后,打开IDEA,程序上打上断点,运行模式选远程,点击运行。调用服务器端运行的系统程序,系统自动进入断点
4,为什么可以进行远程调试,背后的原理是什么?
首先,了解下的Java程序的执行过程- 分为以下几个步骤:Java的文件 - - 编译生成的类文件(class文件) - - JVM加载类文件 - - JVM运行类字节码文件 - - JVM翻译器翻译成各个机器认识的不同的机器码。
远程调试原理
众所周知,Java 程序是运行在Java 虚拟机(JVM )上的,具有良好跨平台性,是因为Java程序统一以字节码的形式在JVM中运行,不同平台的虚拟机都统一使用这种相同的程序存储格式。因为都是类字节码文件,只要本地代码和远程服务器上的类文件相同,两个JVM通过调试协议进行通信(例如通过插座在同一个端口进行通信),另外需要注意的时,被调试的服务器需要开启调试模式,服务器端的代码和本地代码必须保持一致,则会造成断点无法进入的问题。
<code>Java</code>的调试器架构
这个架构其实质还是JVM,只要确保本地的Java的源代码与目标应用程序一致,本地的Java的源码就可以用插座连接到远端的JVM,进而执行调试。因此,在这种插座连接模式(下文介绍)下,本地只需要有源码,本地的Java的应用程序根本不用启动。
传输方式,默认为Socket ;
套接字:MACOS,Linux的系统使用此种传输方式;
共享内存:WINDOWS系统使用此种传输方式。
调试模式,默认为Attach ;
Attach :此种模式下,调试服务端(被调试远程运行的机器)启动一个端口等待我们(调试客户端)去连接;
Socket :此种模式下,是我们(调试客户端)去监听一个端口,当调试服务端准备好了,就会进行连接。
配置属性说明补充
1.idea的的服务的开启调试模式设置详细说明,
文本:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8089"
2.各参数解释:
- -Xdebug:通知JVM工作在调试模式下
- -Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境。参数同时有一系列的调试选项:
- <code>session</code>:指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另外dt_shmem指用共享内存方式,其中dt_shmem只适用于窗口平台.server 参数是指是否支持在服务器模式的虚拟机中。
- onthrow:指明当产生该类型的异常时,JVM就会中断下来,进行调式该参数任选。
- <code>release</code>:指明当JVM被中断下来时,执行的可执行程序该参数可选
- <code>suspend</code><:指明:是否在调试客户端建立起来后,再执行 JVM。
- onuncaught(= y或n)指明出现未捕获的异常后,是否中断JVM的执行。
3.IDEA设置远程属性说明,以下为谷歌翻译
Intellij IDEA远程debug教程实战和要点总结相关推荐
- IntelliJ IDEA远程debug调试
IntelliJ IDEA远程debug调试 IntelliJ IDEA远程debug调试 解决痛点: 排查线上bug log日志埋点不准确,告别屡次打包部署cycle 前提: 本地代码必须与远程代码 ...
- IntelliJ IDEA 远程deBug jar包
SpringBoot.jar 配置 #启动命令新增配置如下: java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,ad ...
- Intellij IDEA 远程debug、远程tomcat部署项目
- IDEA配置远程debug
1.背景 本地打断点debug程序我们都不陌生,但是有些时候我们可能需要把服务运行在远程服务器上调试,那怎么让服务在运行时跑到我们本地IDE的断点呢.这里面Java实现了一套远程debug协议,我们不 ...
- 【转载】IntelliJ远程调试教程
原文链接:https://www.cnblogs.com/wy2325/p/5600232.html 概述 对于分布式系统的调试不知道大家有什么好的方法.对于我来说,在知道远程调试这个方法之前就是在代 ...
- Java远程DEBUG调试教程
背景 在日常的开发工程中可能需要排查线上Bug,此时远程DEBUG就发挥用处了,前提是保持远程和本地的代码版本是一致的. 原理 Java程序经过编译后的字节码是运行在JVM上的,通过JDWP将其和代码 ...
- IntelliJ IDEA开发入门教程
IntelliJ IDEA开发入门教程 本系列教程从 IntelliJ IDEA 的安装.卸载.软件设置.项目配置等各个方面进行讲解.通过本系列教程的学习,也希望你能爱上 IntelliJ IDEA, ...
- 微服务Springcloud超详细教程+实战(二)
微服务Springcloud超详细教程+实战(二) -------------------------------------- 远程调用方式 无论是微服务还是分布式服务(都是SOA,都是面向服务编程 ...
- Java断点调试 idea断点调试 debug教程
IDEA断点调试 Java程序断点调试 文章目录 IDEA断点调试 Java程序断点调试 前言 一.什么情况下需要debug 二.使用idea如何进行debug 三.假设案例分别进行debug教程 1 ...
- Intellij Idea远程调试小记
最近在Spring开发中遇到一个小问题,导致代码每次跑到Biz层就出现跑空的情况,遂找力哥给讲解了以下Intellij Idea 远程调试的方法. 1.首先mvn编译参数: mvn clean pac ...
最新文章
- micropython mqtt_MicroPython使用MQTT协议接入OneNET云平台
- Docker基础入门总结
- 《几何与代数导引》习题1.18——Ceva 定理
- numpy pandas 查找在一个区间中的值
- rocketmq 重复消费_消息队列 RocketMQ
- 获取Linux 2.6.x sys_call_table
- 关于AD9371FilterWizard无法运行问题
- Flutter 城市/通讯录列表字母索引联动效果实现
- luogu 2411 白银莲花池 luogu 1606 Lilypad Pond
- Revit二次开发 ----> 管道翻弯
- 最新1000道高频Java面试题,包含25个技术栈等面试攻略(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构
- 装满了自我提升的33个学习平台
- 计算机网络实验之验证性实验
- 【报告分享】2020中国教育培训移动应用发展研究报告-TalkingData(附下载)
- WIN10装cygwin后,打开提示找不到mintty
- 数据库(Mysql)的四种隔离级别
- 基于gmssl SM2 签名验签测试程序
- 电子科大信软互+班 程算I 2021机考真题
- 车牌号正则表达式-普通车和新能源车
- 阿里云推荐码 9折优惠 vx89to