springboot使用IDEA远程Debug

项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug。

线上的代码一定要和本地的一致!

环境:

  • 2.1.4.RELEASE(org.springframework.boot)
  • jdk1.8
  • Apache Maven 3.5.0

1、先创建一个准备远程调试的Demo,注意构建项目的配置

<?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.1.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.remote.test</groupId>
	<artifactId>remote_test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>remote_test</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</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-api</artifactId>
			<version>RELEASE</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>2.2</version>
				<dependencies>
					<dependency>
						<groupId>org.springframework.boot</groupId>
						<artifactId>spring-boot-maven-plugin</artifactId>
						<version>2.1.4.RELEASE</version>
					</dependency>
				</dependencies>
				<configuration>
					<keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope>
					<createDependencyReducedPom>false</createDependencyReducedPom>
					<filters>
						<filter>
							<artifact>*:*</artifact>
							<excludes>
								<exclude>META-INF/*.SF</exclude>
								<exclude>META-INF/*.DSA</exclude>
								<exclude>META-INF/*.RSA</exclude>
							</excludes>
						</filter>
					</filters>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<finalName>${project.artifactId}-${project.version}-all</finalName>
							<transformers>
								<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>META-INF/spring.handlers</resource>
								</transformer>
								<transformer implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
									<resource>META-INF/spring.factories</resource>
								</transformer>
								<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>META-INF/spring.schemas</resource>
								</transformer>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<!--根据项目的全名指定启动类-->
                                    <mainClass>com.remote.test.remote_test.RemoteTestApplication</mainClass>
								</transformer>
							</transformers>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
package com.remote.test.remote_test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("remote/test")
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @PostMapping("selectByUserId")
    public String selectUserInfo(@RequestParam("userId") String userId) {
        try {
            Map<String,Object> userInfo = new HashMap<>();
            userInfo.put("userId",userId);
            userInfo.put("age",23);
            userInfo.put("name","yanshao");
            userInfo.put("address","shanghai");
            logger.info("Query user information by user ID. userInfo: {}",userInfo.toString());
            return this.success(userInfo);
        } catch (Exception e) {
            logger.error("Query user information by user ID. userId:{} ", userId, e);
            return this.fail();
        }
    }

    private String success(Object data){
        Map<String,Object> res = new HashMap<>();
        res.put("code",0);
        res.put("desc","success");
        res.put("data",data);
        return res.toString();
    }

    private String fail(){
        Map<String,Object> res = new HashMap<>();
        res.put("code",1);
        res.put("desc","fail");
        return res.toString();
    }

}

2、打包

输入:mvn clean package,(大概需要等几分钟),最好在构建之前指定本地repository,就不需要重新下载jar包了。

3、在IDEA配置远程Debug

指定socket port = 8081,指定准备debug的模块

4、在终端启动刚才打好的jar包

a. 先在IDEA启动debug

b. 然后在终端输入命令:java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jar

5、测试

在准备请求的接口上标记断点

注意:必须先在IDEA启动Debug,然后再启动项目

➜ Desktop java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jar

ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]

到此这篇关于springboot使用IDEA远程Debug的文章就介绍到这了,更多相关springboot IDEA远程Debug内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • idea springboot远程debug的操作方法

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

  • springboot使用IDEA远程Debug

    项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug. 线上的代码一定要和本地的一致! 环境: 2.1.4.RELEASE(org.springframework.boot) jdk1.8 Apache Maven 3.5.0 1.先创建一个准备远程调试的Demo,注意构建项目的配置 <?xml version="1.0" encoding="UTF-8"?> <proje

  • 远程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

  • 因不会远程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视频教程+文档+源码下载 大家好,我是曹尼玛,刚从培训机构毕业,去一家单位上班一周了- 这一周项目经理让我熟悉了项目业务,架构和设计,不算难,凭借我培训

  • Eclipse远程debug的步骤与注意事项

    目的:可以适用于支付宝微信支付接口的一些签名验证需要放在服务端才能执行又需要debug时. 步骤:需要在远程服务端修改tomcat配置,然后在本地进行debug配置. 远程tomcat配置:个人习惯使用./startup.sh进行启动,所以介绍对应方式,有兴趣可以留言,我们探讨其它方式. 在catalina.sh文件中加入如下配置: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend

  • 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

  • Intellij IDEA远程debug教程实战和要点总结(推荐)

    远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用. JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系,本地的Java文件在远程JVM建立联系和通信.此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然. 本机Intellij IDEA远程调试配置 1,打开Inteliij IDEA,顶部菜单栏选择Run-> Edit Configurations,进入下

  • 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

  • Springboot如何连接远程服务器上的数据库实践

    Springboot项目如何连接远程服务器上的数据库 没有数据库服务器,就在自己的服务器上装了mysql,希望将数据库的mysql开放给外部用户,设置如下. 1.在自己的服务器放开3306的端口,当然也可以限制ip的来源,限制那些ip才能够访问. 2.在远程数据库创建一个以供开放的角色,这个角色你可以根据不同的需求场景,开放某一个数据库,授予不同的权限等.以下我创建了一个用户Akio,允许来自任何ip的用户都可借此登录.当然你也可以根据语法创建更多类型更多场景的用户. 3.授予权限,ALL PR

随机推荐