远程debug调试入门

目录
  • 1.远程DEBUG的必要性
  • 2,IDEA构建SpringBoot测试Demo
  • 3,测试Demo项目配置支持远程调试
  • 4,IDEA打包jar
  • 5,启动jar并且带启动参数支持远程调试
  • 6,IDEA远程DEBUG配置
    • 1,启动项下拉,选择 Edit Configurations...编辑配置
    • 2,点击+,选择Remote,添加远程DEBUG配置
    • 3,添加远程DEBUG配置项,Host和Port,配置后,点击ApplyOK按钮
  • 7,IDEA远程DEBUG测试
    • 1,打测试断点
    • 2,选择远程debug启动项,然后点击测试调试按钮启动;
    • 3,postman测试
    • 4,成功进入断点
    • 5,启动的jar包打印信息,测试OK
  • 8,eclipse远程DEBUG实现
    • 1,右击项目 -> Debug As -> Debug Configurations…
    • 2,找到 Remote Java Application 然后右击 New
    • 3,配置HostPort,点击Debug按钮,即可实现远程DEBUG
  • 9,打war包方式配置远程DEBUG
  • 总结

1.远程DEBUG的必要性

由于部署环境的差异性,相信很多朋友都碰到过开发环境正常测试过的功能在测试环境甚至生产环境下出现bug的情况。一般情况下,生产环境可以采取的手段比较单一,即通过日志的方式获取运行中的环境上下文,分析日志文件并尝试重现bug。这会带来的问题还是不少的,首先,日志的分析是一项比较耗时的工作;其次,现有的日志记录不一定能反映出问题,你可能需要多次重复这个过程(分析日志->猜测问题->加日志->部署->获取日志)来慢慢逼近问题。倘若是测试环境,我们还多了一项可供选择的手段——远程调试——将程序在测试环境中以debug模式启动,在本机使用IDEA在工程中设置断点进行调试。

2,IDEA构建SpringBoot测试Demo

新建SpringBoot测试项目remote-debug,只需要web依赖支持即可;版本选用2.2.6.RELEASE(注意,别用2.5.1版本,有坑,亲测)

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.java1234</groupId>
	<artifactId>remote-debug</artifactId>
	<version>v1.0</version>
	<name>remote-debug</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

application.yml:

server:
  port: 80
  servlet:
    context-path: /
  tomcat:
    uri-encoding: utf-8

简单搞个TestController,提供一个Rest接口

package com.java1234.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author java1234_小锋
 * @site www.java1234.com
 * @company Java知识分享网
 * @create 2021-06-12 15:37
 */
@RestController
public class TestController {

    @PostMapping("/test")
    public String test(Integer id,String name){
        System.out.println("id="+id);
        System.out.println("name="+name);
        if(id>0){
            return "success "+name;
        }else{
            return "fail";
        }
    }

}

我们启动项目,用postman测试下:

测试接口:http://localhost/test 加入Body form-data 参数 id=1,name=marry,Send 测试,返回 success marry,测试OK;

3,测试Demo项目配置支持远程调试

pom.xml里配置jvmArguments参数 -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n:

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
				<jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n</jvmArguments>
			</configuration>
		</plugin>
	</plugins>
</build>

加了此配置后,打包后的项目发布服务器,可支持远程DEBUG;

具体参数详解:

-Xdebug 通知JVM工作在DEBUG模式下;

-Xrunjdwp 通知JVM使用(Java debug wire protocol)运行调试环境。该参数同时包含了一系列的调试选项;

**transport **指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台;

address 调试服务器的端口号,客户端用来连接服务器的端口号;

server=y/n VM 是否需要作为调试服务器执行;

suspend=y/n 是否在调试客户端建立连接之后启动 VM;

4,IDEA打包jar

我们打包jar包;

右侧Maven工具,双击 package打包工具;

一般打包跳过test,可以点击箭头所指闪电图标,这样打包速度会快很多;

打包后,在target目录下,会生成一个jar包;我们把它复制出来即可;

5,启动jar并且带启动参数支持远程调试

我们把remote-debug-v1.0.jar放D盘根目录;

我们启动jar,并且支持远程DEBUG;

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar remote-debug-v1.0.jar

启动OK,监听socket 5005端口

6,IDEA远程DEBUG配置

IDEA要进行远程DEBUG,需要进行配置;

1,启动项下拉,选择 Edit Configurations...编辑配置

2,点击+,选择Remote,添加远程DEBUG配置

3,添加远程DEBUG配置项,Host和Port,配置后,点击ApplyOK按钮

7,IDEA远程DEBUG测试

1,打测试断点

我们直接在TestController类里的test方法上打点断;

2,选择远程debug启动项,然后点击测试调试按钮启动;

3,postman测试

4,成功进入断点

我们走完断点;

5,启动的jar包打印信息,测试OK

8,eclipse远程DEBUG实现

1,右击项目 -> Debug As -> Debug Configurations…

2,找到 Remote Java Application 然后右击 New

3,配置HostPort,点击Debug按钮,即可实现远程DEBUG

9,打war包方式配置远程DEBUG

如果打的是war包,需要两个步骤:

1.将 web 应用部署到 Tomcat 的 webapp 目录下

2.修改 Tomcat/bin/startup.bat 文件,在最前面加上如下代码:

SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程

    时间:2020年8月15日10:25:47 Xdebug插件安装省略,自己百度安装,win和linux环境安装方式不一样. 注意和php版本匹配 1.phpinfo信息 2.php.ini配置 [xdebug] zend_extension=/usr/lib64/php/modules/xdebug.so xdebug.remote_enable =1 xdebug.profiler_enable = On xdebug.auto_trace=On xdebug.profiler_enable_

  • Pycharm debug调试时带参数过程解析

    这篇文章主要介绍了Pycharm debug调试时带参数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天在网上找了一个例子敲代码,因为我使用的是PyCharm,例子运行时需要带参数,开始不知道怎么带参数,网上搜了大半天,最终才找到自己想要的方法,记录一下. 代码中有需要使用到参数,如下图: 因为开始不知道怎么带参数,直接运行时,报错,因为没参数 运行时,至少需要一个文件参数,添加参数 在PyCharm中选择'Run'->Edit C

  • Spring Boot Debug调试过程图解

    这篇文章主要介绍了Spring Boot Debug调试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近发现 Spring Boot 本地不能 Debug 调试了,原来 Spring Boot 升级后,对应插件的命令参数都变了,故本文做一个升级. 背景: Spring Boot 项目在使用 Spring Boot Maven 插件执行启动命令 spring-boot:run 的时候,如果设置的断点进不去,要进行以下的设置. 官方解决

  • idea 无法debug调试的解决方案

    使用idea 调试模式运行项目是启动不了,本人亲自测试有效使用 报错信息如下 C:\tomcat路径\apache-tomcat-8.5.40\bin\catalina.bat run [2019-04-19 10:53:53,796] Artifact agro_examina: Waiting for server connection to start artifact deployment... Using CATALINA_BASE: "C:\Users\Administrator\.

  • 你不知道的 IDEA Debug调试小技巧(小结)

    一.多线程调试断点 Intellij IDEA 的debug断点调试是有一个模式的选择的,就像下面这张图,平时我们都使用的是默认的 ALL(在Eclipse中默认是线程模式) ,这种模式我们只能将一个线程断下来,但其他线程却已经执行过了:而将其改为 Thread 后,就可以多个线程都断下来,并且可以很方便的切换线程的执行流程,这就是多线程调试. 在debug控制台能够很方便的查看线程的执行状态,也可以很方便的选择某个线程去执行: 二.回退断点 不知道大伙有没有遇到这样一个问题,当我们进行debu

  • 远程debug调试入门

    目录 1.远程DEBUG的必要性 2,IDEA构建SpringBoot测试Demo 3,测试Demo项目配置支持远程调试 4,IDEA打包jar 5,启动jar并且带启动参数支持远程调试 6,IDEA远程DEBUG配置 1,启动项下拉,选择 Edit Configurations...编辑配置 2,点击+,选择Remote,添加远程DEBUG配置 3,添加远程DEBUG配置项,Host和Port,配置后,点击Apply和OK按钮 7,IDEA远程DEBUG测试 1,打测试断点 2,选择远程deb

  • idea远程debug调试部署在tomcat上项目

    目录 一.IDEA添加Remote 二.服务器配置 三.开始debug调试 本机场景:spring boot项目部署在腾讯云服务器的tomcat里.注意:要保证本地的代码与服务器上部署的代码完全一致 一.IDEA添加Remote   第一步:打开IDEA上方的Edit Configurations   第二步:点击+号选择Remote   第三步:配置连接参数.   Command line arguments for remote JVM:-agentlib:jdwp=transport=dt

  • Hadoop源码分析四远程debug调试

    1. hadoop远程debug 从文档(3)中可以知道hadoop启动服务的时候最终都是通过java命令来启动的,其本质是一个java程序.在研究源码的时候debug是一种很重要的工具,但是hadoop是编译好了的代码,直接在liunx中运行的,无法象普通的程序一样可以直接在eclipse之类的工具中直接debug运行. 对于上述情况java提供了一种远程debug的方式. 这种方式需要在java程序启动的时候添加以下参数: -agentlib:jdwp=transport=dt_socket

  • 因不会远程debug调试我被项目经理嘲笑了

    目录 1,远程DEBUG的必要性 2,IDEA构建SpringBoot测试Demo 3,测试Demo项目配置支持远程调试 4,IDEA打包jar 5,启动jar并且带启动参数支持远程调试 6,IDEA远程DEBUG配置 7,IDEA远程DEBUG测试 8,eclipse远程DEBUG实现 9,打war包方式配置远程DEBUG 10,远程debug视频教程+文档+源码下载 大家好,我是曹尼玛,刚从培训机构毕业,去一家单位上班一周了- 这一周项目经理让我熟悉了项目业务,架构和设计,不算难,凭借我培训

  • Tomcat使用IDEA远程Debug调试的讲解

    Tomcat运行环境:CentOS6.5.Tomcat7.0.IDEA 远程Tomcat设置 1.在tomcat/bin下的catalina.sh上边添加下边的一段设置 CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=60222,suspend=n,server=y" 2.address=60222 这个是后边IDEA设置的时候需要用到的调试端口,可以任意设置一个未使用的端口,但是后边的配置都要一致. IDEA设

  • Pycharm 如何连接远程服务器并debug调试

    目录 1 设置链接的账号密码: 2.1 终端界面连接服务器: 2.2 使用pycharm查看linux服务器上的各种文件,并且使用pycharm编辑器界面直接修改和保存代码. 3 使用pycharm连接远程服务器,使用远程服务器环境,实现代码在本地的运行.调试 3.1 配置连接: 3.2 配置映射关系 3.3 同步代码 3.4 配置远程解释器作为运行环境 3.5 在打开本地代码,进行运行调试!!!! 写在最后的测试小tip 环境说明:本人pycharm是2021.3.3,其它版本设置界面可能略有

  • SpringBoot项目设置断点debug调试无效忽略web.xml问题的解决

    刚接触springboot项目, (1)发现断点debug调试无效,很郁闷,网上搜索解决办法. 看到的都是一些很复杂的方案,说是远程调试,还要另外开端口号.这和传统的项目不一样,因此觉得没必要. 所以经过摸索,发现有一种更加简单的方式,步骤如下: 在pom文件的plugin部分加上一段配置: <configuration> <fork>false</fork> </configuration> 这样就ok了: (2)关于SpringBoot项目中报错说web

  • IntelliJ IDEA远程Debug Linux的Java程序,找问题不要只会看日志了(推荐)

    1 前言 我们习惯于在本地开发的时候debug,能快速定位与解决问题,那部署在服务器上是不是就没有办法了呢?只能通过查看日志来定位? 不是的,在远端的服务器上,我们一样可以debug. 2 IDEA的debug 我们先来看一下在IntelliJ IDEA直接debug是怎样的. 先准备一个简单的Java程序: package com.pkslow.basic; import java.util.Map; public class RemoteDebug { public static void

  • idea springboot远程debug的操作方法

    Remote Debug 综述 当我们的后台项目部署到服务器上时,由于环境和本地不同,有时候也会有一些奇奇怪怪的问题出现.只依赖服务器上的日志来诊断可能太不灵活,这时就需要我们进行远程调试. 在开始我们的步骤前,先确认一点: 我们现在是希望能够在本地远程调试服务器上的程序,也就是说: 本地 = 调试者 服务器 = 被调试者 而且还有一点我们需要注意,就是在调试远程服务器上的代码时,一定要保证 远程服务器 上的代码和 本地 代码一致,不然就失去debug效果了. First Step 本地配置远程

随机推荐