IDEA 远程 Debug 调试,你可以不需要,但是要会

这篇具有很好参考价值的文章主要介绍了IDEA 远程 Debug 调试,你可以不需要,但是要会。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

远程debug真的很有用,我个人的真实经历就是有一次,我新开发的功能,在生产上没生效,我询问了运维多次,运维也多次确认回复说是最新的包,又是查日志,对数据,仍然没发现问题,最后我就采用远程debug发现我新开发的代码不存在。
所以不需要不要紧,但是要会,作为应急处理办法。

来源:本文基于学会 IDEA 远程 Debug 调试,直接线上秀操作一文进行转载、修订、补充

配置

IDEA设置

高低版本的 IDEA 的设置可能界面有点不一样,我用2020.1.1的。大致上差不多,自行摸索。

  1. 选择 Edit Configuration
    IDEA 远程 Debug 调试,你可以不需要,但是要会

  2. 点击加号,选择Remote
    IDEA 远程 Debug 调试,你可以不需要,但是要会

  3. 详细配置见图
    IDEA 远程 Debug 调试,你可以不需要,但是要会

注意:注意端口别被占用。后续这个端口是用来跟远程的java进程通信的。

可以注意到,启动项目的命令根据切换不同的jdk版本,生成的脚本不一样

选择 jdk1.4,则为

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=50055

这就是你为什么搜其他博客,会有这种配置的原因,其实这个配置也是可行的。但更准确应该按照下面jdk5-8的配置

选择 jdk 5-8,则为

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055

选择 jdk9以上,则为

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:50055

据说因为jdk9变得安全了,远程调试只允许本地,如果要远程,则需要在端口前配置*

启动脚本改造

使用idea配置得到的 Command line arguments for remote JVM 即可,即-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055

改造后的启动脚本如下

nohup java \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055 \
-jar remote-debug-0.0.1-SNAPSHOT.jar &

注意在windows中用 ^ 来进行换行,例如

java ^
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055 ^
-jar remote-debug-0.0.1-SNAPSHOT.jar

说明:

  1. 端口可随意自己定,未被占用的都行,但是要和IDEA里的remote中设置的端口一致!其他参数照抄。详细的参数解释可以参照附录或自己搜

  2. remote-debug-0.0.1-SNAPSHOT.jar 改成给你自己的 jar 包名字

  3. 我给的脚本是后台运行的,如不需要后台运行,自行去掉 nohup 和 &

  4. 选择刚刚在IDEA配置的进行启动
    IDEA 远程 Debug 调试,你可以不需要,但是要会

细节

细节1:停在本地断点,关闭程序后会继续执行吗

如果远程调试在自己的断点处停下来了,此时关闭IDEA中的项目停止运行,则还会继续运行执行完剩下的逻辑吗?会的,这点比较不容易记住

以下面的代码为例,在第一行停住了。然后IDEA中停掉,发现停掉之后控制台还是打印了剩下的日志。

IDEA 远程 Debug 调试,你可以不需要,但是要会

细节2:jar包代码和本地不一致会怎么样?

IDEA 里的代码如果不和jar包的一致,会怎么样。

结论:要保证和远程启动的代码一致。

否则你debug的时候的行数会对不上。报错抛异常倒是不会。像这种还是能对得上行数的

比如你调试test1方法,test2方法在test1下面,在test2里加代码,这样并不影响test1中的行号,这种是可以在调试的时候准确反应行号的。(我也就是在细节上发现的生产代码与我本地代码不一致的)

细节3:日志打印在哪里?

日志不会打印在IDEA的控制台上。即System.out 以及 log.info 还是打印在远程的。

细节4:调试时其他人会不会卡住?

远程调试的时候,打了断点,停住后会不会导致页面的请求卡住。

比如你使用远程调试,别的QA在测试这个页面,结果他们看到的结果是怎么样的?会卡住吗?会的,已经实际遇到过这种情况了。

细节5:本地代码修复bug,远程调用的会执行吗

如果在远程调试过程自己发现了bug,本地改好后重新启动IDEA里的项目,再到页面调用一次,能修复吗?不能,运行的还是远程部署的jar中的代码

细节6:本地Drop Frame(Reset Frame)的问题

关于drop frame的问题,如果Drop Frame了重新进行调试,会不会插入2条记录?
这里先说一下Drop Frame是什么,在idea的调试器中查看应用程序的调用堆栈,使用Drop Frame功能,可以回退到前一个堆栈帧,从某种意义上说可以回到过去.如果您错过了想要再次查看的关键点,这有助于重新输入函数。简单来讲就是返回到上一个调用方法。

IDEA 远程 Debug 调试,你可以不需要,但是要会

可能有小伙伴会问:怎么我Debug的时候找不到Drop Frame呢?
其实这个是跟版本有关,在2022.1版本之前叫Drop Frame,之后改为了Reset Frame。

好,继续我们的问题,如下图 userMapper.insert(eo) ,本方法没有使用 @Transactional 修饰,mapper方法执行过后事务会被立即提交,则库表里多了一行记录,如果Drop Frame后,再次进行调试,再次执行这代码,于是又插入了一条记录。
IDEA 远程 Debug 调试,你可以不需要,但是要会

如果加上 @Transational 就不会有两条记录了,Drop Frame的时候事务没被提交,再次执行该插入代码也不会插入2条。

细节7:远程Drop Frame问题

如果把上述插入数据库的逻辑,换成调用远程的接口,在Drop Frame后,再次执行相同的代码,会不会导致远程接口被执行了2次?会的。文章来源地址https://www.toymoban.com/news/detail-477162.html

到了这里,关于IDEA 远程 Debug 调试,你可以不需要,但是要会的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IntelliJ IDEA远程调试:使用IDEA Remote Debug进行高效调试的指南

    在开发分布式系统时,调试是一个重要但复杂的环节。开发者通常需要跨越多个服务、模块和线程来追踪和解决问题。在没有远程调试的情况下,许多开发者会在代码中添加各种日志语句,然后重新部署和上线来调试。这种方法不仅费时,而且可能引入额外的错误或问题。

    2024年02月09日
    浏览(40)
  • IDEA远程Debug调试工具(Remote)的使用

    我们在开发的过程中,经常会遇到这样的情况:代码在本地测试得好好的,但部署上线后测试结果就不一样了,这时就需要去服务器上查看日志进行分析从而定位问题,但这样还是会比较麻烦,如果能够Debug调试,那岂不是美滋滋。 最近了解到IDEA里面其实有远程Debug调试工具

    2024年02月11日
    浏览(42)
  • IDEA实现远程Debug调试(附上Demo代码)

      需要准备JDK1.8环境,安装IDEA(版本不限) (1)、创建demo项目 1.File一New一project… 2.Maven Archetype一填写Name一选择jdk1.8一选择Web一创建 (2)、引入依赖 参数详解: 【-Xdebug】:通知JVM工作在DEBUG模式下。 【-Xrunjdwp】:通知JVM使用(Java debug wire protocol)运行调试环境。 【transport】:指

    2024年02月06日
    浏览(44)
  • 【ETL工具】本地环境IDEA远程DEBUG调试Flume代码

    🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油! 🪁🍁🪁🍁🪁🍁🪁🍁 目录 🦄 个人主页——🎐个人主页 🎐✨🍁 一、问题说明 二、操作步骤 2.1 idea创建远程调试 Flume 自定义 HDFS-Sink,远程服务器进行部署flume打包好后的代码,本地监控远程flume程序

    2024年02月08日
    浏览(40)
  • IDEA工具远程DEBUG调试K8S环境中的容器应用(Java应用)

    IDEA远程调试kubernetes环境中的容器应用(Java应用) 应用场景:Java开发的项目在本地运行正常,然后将 容器运行方式的项目发布到远端服务器上线运行后,出现了异常情况,此时频繁去修改代码发布镜像进行问题验证,将耗费较大的时间成本。 为了提高问题定位和代码调试效率

    2024年02月10日
    浏览(48)
  • 【异常错误】Unexpected option: --local_rank=0(pycharm可以run但是不可以debug)

    今天在使用用run运行shell文件转为的cmd命令后,run可以正常运行,但是debug却出现问题,错误信息: 我再网上查了以后大多数说是因为分布式的原因,可能是因为我使用了deepspeed,所以导致了分布式的问题吧, 此时参考文章:pycharm终止运行_Pycharm 下如何 debug torch.distributed_祁

    2024年02月13日
    浏览(52)
  • Idea断点调试(debug)详解

    打断点: 鼠标左键点击这里就会出现一个红点标志 (有各种形状,后续解释),就打上了一个断点。 启动: 对于已经运行过的程序,直接点击,小虫子就能启动 对于没有运行过的程序,找到程序入口(main方法)前面的三角形 ,鼠标右键启动 启动后,当我们的程序执行到

    2024年02月08日
    浏览(58)
  • IDEA debug 断点调试技巧

    1、首先看下IDEA中Debug模式下的界面: ① 以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。 ② 断点:在左边行号栏单击左键,或者快捷键Ctrl+F8 打上/取消断点,断点行的颜色可自己去设置。 ③ Debug窗口:访

    2024年02月15日
    浏览(40)
  • idea 对JavaScript进行debug调试

    前言 : 工作中接手别人的前端代码没有注释,看浏览器的network或者console切来切去,很麻烦,可以试试idea自带的 javscript debug 功能。 浏览器中输入url 查看debug断点 看到断点的变量就显示了。 大功告成!!

    2024年02月11日
    浏览(61)
  • IDEA有些类爆红,但是项目可以正常启动?

    当在IDEA中看到一些类爆红,但项目能够正常启动,这可能是由于以下原因导致的: 1. 缺少依赖或依赖冲突:爆红可能是因为缺少某些依赖或者依赖的版本冲突。确保项目中使用的所有依赖都已正确配置,并且版本兼容。 2. IDE缓存问题:IDEA有时可能会出现缓存问题,导致一些

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包