idea远程调试修改代码_java使用idea远程调试服务器代码

有时候我们调试代码需要到远程服务器上才可以调试,比如调用微信、支付宝等支付业务,普通的做法是在代码里关键点打印日志,通过查看远程服务器日志一步步调试,但如果没有打印需要的日志,就需要重新修改代码,然后重新部署到服务器再次调试,操作不太方便。

解决办法就是远程调试,让你能够像在本地调试一样 Debug 远程服务器。

必须保证本地代码和服务器上运行的代码是一样的。

1 写一个简单的springboot项目用于演示

1.1 用idea创建一个新项目

image.png

1.2 选择Spring Initializr,然后next

image.png

1.3 然后next

image.png

1.4 简单演示,只选spring web就行了

image.png

1.5 改了一下项目名,然后finish

image.png

1.6 一个springboot项目就创建完毕了

image.png

1.7 设置端口号(我的服务器是阿里云的,端口需要在阿里云配置安全组,我这里设置一个可以访问的端口号)

server.port=9550

image.png

1.8 写一个用于测试的接口(name不是必传,用于模拟当出现bug的时候调试)

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;

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

@RestController

public class HelloController {

@GetMapping("/hello")

public String hello(@RequestParam(required = false)String name){

return "hello," + name.toUpperCase();

}

}

image.png

1.9 本地debug调试,确保是我们想要的效果

注意控制台打印的前两行

/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50918,suspend=y,server=n

Connected to the target VM, address: '127.0.0.1:50918', transport: 'socket'

image.png

image.png

1.9.1 正常访问

image.png

1.9.2 错误访问,不传name

image.png

1.9.3 打断点,再次访问,是我们想要的效果

image.png

image.png

1.10 打jar包

image.png

image.png

1.11 将jar包上传到服务器

2 在服务器上运行jar包

2.1 启动命令中需要添加jvm启动参数

# jdk1.5之前采用-Xdebug -Xrunjdwp,transport=dt_socket,server=y,suspend=n,address=9560

# jdk1.5之后采用-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9560 当然上面那种也支持

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

image.png

2.2 参数说明

2.2.1 jdwp

JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和目标虚拟机(target vm)之间的通信协议。Target vm 中运行着我们要调试的 Java 程序,它与一般运行的 JVM 没有什么区别,只是在启动时加载了 JDWP Agent 从而具备了调试功能。而 debugger 就是我们本地的调试器,它向运行中的 target vm 发送指令来获取 target vm 运行时的状态和控制远程 Java 程序的执行。Debugger 和 target vm 分别在各自的进程中运行,他们之间通过 JDWP 通信协议进行通信。

2.2.2 transport=dt_socket

表示使用socket通信协议

2.2.3 server=y

表示该JVM用于调试

2.2.4 suspend=n

表示JVM 立即执行,不要等待调试者连接

2.2.5 address

连接的端口

3 直接访问服务器接口地址,看是否可以请求成功

image.png

image.png

4 idea开启远程调试

4.1 Edit Configurations...

image.png

4.2 点击左上角➕

image.png

4.3 选择remote

image.png

4.4 设置服务器ip和端口,端口是服务器启动jar包时设置的address

image.png

4.5 本地idea开启debug,选择刚才添加的远程配置,没改名字,所以是unnamed

image.png

看控制台打印可以看出已经连接上远程

image.png

4.6 访问服务器接口

4.6.1 正常访问

image.png

image.png

4.6.2 错误访问

image.png

image.png

4.7 验证确实是访问的远程,访问本地接口发现被拒绝

image.png

到此,远程调试就演示完毕了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值