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,一经查实,立即删除!

相关文章

php嗅探木马,PHP安全-密码嗅探

密码嗅探尽管攻击者通过嗅探(察看)你的用户和应用间的网络通信并不专门用于访问控制&#xff0c;但要意识到数据暴露变得越来越重要&#xff0c;特别是对于验证信息。使用SSL可以有效地防止HTTP请求和回应不被暴露。对任何使用https方案的资源的请求可以防止密码嗅探。最好的方…

Idea进行远程Debug

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

如何用php查不同,php-MySql调查不同查询

大家好,我确实在MySql查询中苦苦挣扎,我有一个名为“ info”的表,并且其中有一个名为“ rating”的列,评分在1-10之间.现在,我需要生成一个百分比值,该百分比值表示1-6、7-8和9-10中有多少评级,但我需要它们拼命显示,之后我需要第二个查询,该查询可以从中减去结果的百分比值1-6…

如何使用websocket实现前后端通信

如何使用websocket实现前后端通信 websocket通信是很好玩的&#xff0c;也很有用的的通信方式&#xff0c;使用方式如下&#xff1a; 第一步由于springboot很好地集成了websocket&#xff0c;所以先在在pom.xml文件中引入依赖 <dependency><groupId>org.springfr…

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

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

tail查看nohup.out文件内容

1.前台实时查看nohub.out文件内容&#xff1a; tail -f nohup.out 2.根据关键字查看 tail -f nohup.out |grep "关键字"3.输出文件最后100行 tail -n 100 nohup.out 4.输出文件最后100行&#xff0c;含关键字 tail -n 100 nohup.out |grep "关键字"

Linux nohup实现后台运行程序及查看(nohup与)

Linux nohup实现后台运行程序及查看&#xff08;nohup与&&#xff09; 更新时间&#xff1a;2019年09月11日 09:28:40 作者&#xff1a;猿的生活 这篇文章主要介绍了Linux nohup实现后台运行程序及查看&#xff08;nohup与&&#xff09;&#xff0c;文中通过示例代码…

php面向对象异常处理,PHP面向对象编程——自定义PHP异常处理类

/*?* WEB开发笔记 www.chhua.com 每日练习 PHP面向对象编程——自定义PHP异常处理类?* 这所以用自定义的异常类&#xff0c;主要是区分异常来自程序的哪一部分&#xff0c;比如是来自MYSQL的还是来自MODEL的?* 一般情况下&#xff0c;自定义的异常类也不要太多&#xff0c;否…

java createstatement,createStatement参数说明

Statement stmtconn.createStatement(参数一,参数二)第一个参数可以取值为ResultSet.RTYPE_FORWORD_ONLY:这是缺省值,只可向前滚动;ResultSet.TYPE_SCROLL_INSENSITIVE:双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来.ResultSet.TYPE_SCROLL_S…

websocket的用途/场景

websocket的用途/场景 先总结&#xff1a;高即时性服务&#xff0c;比如聊天室的群聊&#xff0c;server顺序收到了张三&#xff0c;李四的消息&#xff0c;立即就推送给王五&#xff0c;不能让王五等半天。 Ajax也可以一秒一刷&#xff0c;让王五去问张三说话没&#xff0c;如…

websocket学习总结记录

Websocket 1.基本概念 WebSocket是一种网络通信协议。 websocket和http 的区别&#xff0c;http的缺陷&#xff0c;只能从客户端发起请求&#xff08;单项请求&#xff09;不能从服务器发起请求。如果服务器有连续性的变化时&#xff0c;如果我们想要每一个时刻都获得最新的…

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; #!…

matlab compiler 与matlab coder 区别,MATLAB编译器与MATLAB编码器

MATLAB编译器将您的MATLAB代码(保留为MATLAB .m代码)进行encryption和归档&#xff0c;并将其打包为一个精简的可执行文件(.exe或.dll)包装器。 这是随MATLAB编译器运行时(MCR)一起提供给最终用户的。 如果你愿意&#xff0c;MCR也可以打包在可执行文件中。MCR可以自由的重新分…

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

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

php txtsql 说明,PHP学习笔记(2)txtSQL文档错误

PHP学习笔记(2)txtSQL文档错误次阅读在使用txtSQL的过程中&#xff0c;发现一处帮助文档错误。在使用altertable命令改变表名称时&#xff0c;发现如果按照帮助文档所说&#xff0c;使用如下代码无法改变表的名称&#xff1a;$sql->altertable(array(db>$db_name,table&g…

php中cookie存的是什么,PHP中Cookie存在的作用和用法

1、使用$_COOKIE读取Cookie使用Session只能让网站记住当前正在访问的用户&#xff0c;但有时网站还需要记住曾经访问过的用户&#xff0c;以便在用户下次访问时.提供个性化的服务。这就需要用到Cookie技术。Cookie能为网站和用户带来很多好处.如它可以记录特定用户访问网站的次…