首页 > 其他分享 >IDEA进行远程Debug调试的来龙去脉

IDEA进行远程Debug调试的来龙去脉

时间:2023-12-25 21:08:45浏览次数:37  
标签:Java 来龙去脉 Jar IDEA Idea JVM Debug 调试 调试器


一、前言

我们在测试环境时,遇到一些bug,看上下文的日志,还是无法判断出问题所在时,此时需要Debug来解决。

为了更方便、更高效地定位和解决问题,远程调试成为一种常见的实践方式。

这个还是不建议在生产中使用,可以在测试环境走和生产一样的单据来Debug。要是生产环境忘记去掉断点,直接炸了!

还是不到万不得已不要在生产使用,使用完也要把本地的断点全部取消掉!

二、JPDA

在实战之前,我们可以了解一下JPDA!能够远程Debug就是使用这个技术实现的!

1. 概念

JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,它是 Java 开发工具包(JDK)中提供的一组 API 和协议,用于支持 Java 程序的调试。

2. 核心组件

Java 虚拟机工具接口(JVMTI): JVMTI 提供了在 Java 虚拟机 (JVM) 中运行时监视和检测的一组 API。它允许调试器在运行时获取有关类、对象、线程等信息,并在程序执行时进行干预。

Java 调试器接口(JDI): JDI 是在 JPDA 中用于编写调试器的 Java API。它允许开发者通过 Java 语言编写调试器,实现与 JVM 的通信和控制。

Java 虚拟机调试协议(JDWP): JDWP 是 JVM 与调试器之间通信的协议。它定义了调试器如何与 JVM 进行通信,包括断点设置、变量检查、执行控制等。

IDEA进行远程Debug调试的来龙去脉_ide

3. 调试功能

断点设置: 在代码中设置断点,以便在执行到特定代码行时暂停程序的执行。
变量检查: 查看和修改程序中的变量值。
单步执行: 逐步执行程序,以便更详细地检查代码的执行过程。
异常处理: 在程序抛出异常时停止执行,以进行异常处理。

三、Idea实战

非常的简单就是运行Jar包的时候加上命令,在Idea配置上远程调试就行了!

1. Jar包准备

新建一个项目或者使用公司的项目,打成Jar包。为了模拟真实性,我们在windows里运行Jar包一次,然后上传到虚拟机里运行一次!

IDEA进行远程Debug调试的来龙去脉_intellij-idea_02


自己写一个Controller,接收请求,多写几行方便打断点:

/**
 * @author wangzhenjun
 * @date 2023/11/28 15:54
 */
@RequestMapping("/test")
@RestController
public class TestController {

    @GetMapping("/list")
    public String list (){
        System.out.println("======1======");
        System.out.println("======2======");
        System.out.println("======3======");
        System.out.println("======4======");
        return "成功";
    }
}

2. Idea配置远程监听

此时Idea已经把运行Jar包的命令给我们了!

IDEA进行远程Debug调试的来龙去脉_intellij-idea_03

3. 运行Jar包

找到jar所在位置,执行命令:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8088 -jar demo-0.0.1-SNAPSHOT.jar

我们来解释一下命令的意义:

-agentlib:jdwp:启用 JDWP 调试支持。

transport=dt_socket:指定 JDWP 调试器和 JVM 之间的通信方式为 socket 传输。

transport 参数有两种常见的模式,分别是 dt_socket 和 dt_shmem

dt_socket:使用 socket 传输模式,一般用于调试服务器运行
dt_shmem:使用共享内存传输模式,一般用于本地调试,因为共享内存需要在同一台物理机器上才能正常工作。

server=y:表示 JVM 将作为调试服务器运行,等待调试器连接。

suspend=n:指定 JVM 在启动后是否暂停等待调试器连接。n 表示不暂停,即 JVM 在启动后立即执行应用程序。如果设置为 y,则 JVM 启动后会等待调试器连接,直到调试器连接上为止。

address=8088: 指定调试器连接的端口号,和Idea监听的端口一致。

我们先访问一下,控制台是可以打印我们的日志!

IDEA进行远程Debug调试的来龙去脉_java_04

4. 测试

我们启动Idea配置好的监听,然后再打上断点!

IDEA进行远程Debug调试的来龙去脉_调试器_05

访问接口,成功拦截到请求!

IDEA进行远程Debug调试的来龙去脉_调试器_06

放行后,查看控制台正常输出:

IDEA进行远程Debug调试的来龙去脉_java_07


此时我们使用虚拟机里的Jar包启动!

需要我们把Idea中的本地IP换成虚拟机的IP

IDEA进行远程Debug调试的来龙去脉_Java_08

重新访问,没有问题,我们放行后正常打印!

IDEA进行远程Debug调试的来龙去脉_Java_09

四、总结

是不是非常的简单,大家可以自己试一下,这里还是在测试环境玩玩就行。

这种方式还有弊端,现在一般都是容器化部署,这种命令就不太好使了,感兴趣的可以试试使用docker容器来发布!

是不是发布完之后,把Jar包挂载出来,然后再运行一遍专门来Debug的!

有大佬试过的欢迎指教哈!


标签:Java,来龙去脉,Jar,IDEA,Idea,JVM,Debug,调试,调试器
From: https://blog.51cto.com/wangzhenjun/8972105

相关文章

  • 这款IDEA插件用着确实爽
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、......
  • 免费IDEA插件推荐-Apipost-Helper
    IDEA插件市场中的API调试插件不是收费(FastRequest)就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用!这款插件由Apipost团队开发的,其官方介绍是:用于IDEA项目快速生成API文档,快速查询接口、接口代码功能,并支持在IDEA中进行API......
  • IntelliJ IDEA 2022.3.2 专业版安装
    IDEA2022版本介绍IDEA2022引入依赖分析器,用于管理依赖项和解决冲突。JetBrains公司的IDEA是Java编程语言开发撰写时常用的集成开发环境,IntelliJIDEA强大的静态代码分析和人体工程学设计,让你的开发设计简单轻松,IntelliJIDEA将您的源代码编入索引之后,通过在各个环境中提供相......
  • 使用idea连接github
    一、git概述1、版本控制2、git工作机制和代码托管中心二、git常用命令三、分支1、分支的操作2、代码冲突解决冲突:四、远程仓库1、远程仓库操作2、跨团队协作3、SSH免密登录五、在Idea中使用git1、设置git忽略文件2、设置.gitconfig(和git.ignore在同一个目录下)3、使用idea进行git......
  • Odoo17_禁用从地址栏进debug模式
    1.参考odoo禁用debug模式_odoo14禁用debug-CSDN博客2.直接上代码#-*-coding:utf-8-*-fromodooimporthttpfromodoo.addons.web.controllersimporthomefromodoo.exceptionsimportUserErrorclassDebugHome(home.Home):@http.route('/web',type='ht......
  • 在Idea中使用Vim可太牛了!
    写在前面最近看到了一篇《IDEA+VIM,竟可以这么牛逼!》的文章,博主介绍了如何在Idea中使用Vim,这让自己感觉十分的惊喜。惊的是:原来Vim和IDEA是可以集成到一起的,可以兼用两者的优点提高开发效率。喜的是:终于又可以重拾Vim了,因为以前写C++的时候经常使用Vim做coding,Vim入门可吃了不少......
  • vscode+xdebug+phpenv本地调试php代码
    php环境变量先设置环境变量,找到php目录在vscode里安装phpdebug插件点击插件按钮,搜索phpdebug,找到这里标有Xdebug的,点击安装开启Xdebug组件找到对应版本的php去配置php.in文件把这个放到php.ini的最后,如果里面有则根据情况替换即可,端口号要和下面的vscode里面的统一......
  • java 判断当前是否处于 debug
    Java判断当前是否处于debug模式在开发Java程序时,我们常常需要在调试模式下运行程序来定位问题和进行代码调试。因此,判断当前是否处于debug模式是一项常见的需求。本文将介绍如何在Java中判断当前是否处于debug模式,并提供相应的代码示例。判断当前是否处于debug模式......
  • ICEE-SPI-debug最好用 SPI 和 JTAG 或更优的(高达104MHz的)SPI通信保障飞速的debug响
    S25FL032P:32-MbitCMOS3.0VoltFlashMemorywith104-MHzSPI(SerialPeripheralInterface)MultiI/OBusSPANSIONZentelSDRAM;https://www.zerodayinitiative.com/blog/2019/9/2/mindshare-hardware-reversing-with-the-tp-link-tl-wr841n-routerhttps://openw......
  • IDEA最新2023.3.2激活教程,亲测有效!
    IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。教程更新于12月22日第一步:下载IDEA安装包访问IDEA官网:https://www.jetbrains.com/idea/download/,点击download,下载IDEA2023.2版本的安装包第二步:卸载老版本IDEA(未安......