我的编程空间,编程开发者的网络收藏夹
学习永远不晚

远程debug调试入门

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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


@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;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPf6tyol-1623688298210)(image-20210613222730931.png)]

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打包工具;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3t35X1S1-1623688298215)(image-20210613224738500.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gjGv5k7R-1623688298218)(image-20210613224828589.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K5FN6ULx-1623688298222)(image-20210613224918420.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RERGHClm-1623688298225)(image-20210613225414441.png)]

启动OK,监听socket 5005端口

6,IDEA远程DEBUG配置

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3UGDXNMD-1623688298228)(image-20210613225801811.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3rzwtdYm-1623688298229)(image-20210613230023399.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l0edF9KU-1623688298231)(image-20210613230200362.png)]

7,IDEA远程DEBUG测试

1,打测试断点

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2MqDENbp-1623688298232)(image-20210613230809384.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWmN2f6b-1623688298234)(image-20210613230646749.png)]

3,postman测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VJrvld2D-1623688298236)(image-20210613231151240.png)]

4,成功进入断点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeCKrJS3-1623688298238)(image-20210613231235544.png)]

我们走完断点;

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-waIbt2vf-1623688298241)(image-20210613231336792.png)]

8,eclipse远程DEBUG实现

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCIa03JQ-1623688298243)(image-20210613232154571.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1TZdUQg-1623688298245)(image-20210613232409021.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pDNULzPO-1623688298248)(image-20210613232629335.png)]

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

总结

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

远程debug调试入门

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

pycharm怎样调试debug入门_pycharm调试debug入门技巧

1.打开界面后,导入一个项目文件2.打开Python文件,在要debug的地方添加一个断点3.点击顶部的Run菜单,选择debug选项4.下面我们可以看到当程序运行到debug位置时就会自动停止,并显示蓝条5.下面即可在底部控制断点逐步运行
pycharm怎样调试debug入门_pycharm调试debug入门技巧
2024-05-10

jvm开启远程调试功能;idea远程debug

概述 有时候一些问题本地调试无法复现,这个时候可以开启jvm的远程调试功能 jar包启动 jdk8 java -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=
2023-08-30

pycharm debug怎么使用 pycharm进行debug调试的教程

首先打开pycharm软件,导入一个项目,如下图所示接着打开一个python文件,在要debug的地方添加一个断点,如下图所示然后点击顶部的Run菜单,选择Debug选项,如下图所示接着程序运行到debug的地方就会自动停止,显示一个蓝色的
pycharm debug怎么使用 pycharm进行debug调试的教程
2024-05-10

Java平台调试体系原理分析和实践整理远程Debug

这篇文章主要介绍了Java平台调试体系原理分析和实践整理远程Debug,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-09

IDEA Debug如何实现多线程调试断点

这篇文章主要介绍了IDEA Debug如何实现多线程调试断点,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。多线程调试断点Intellij IDEA 的debug断点调试是有一
2023-06-27

Python必备技能之debug调试教程详解

这篇文章主要为大家详细介绍了Python初学者必须要学会的技能——在Python中进行debug操作,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-03-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录