idea:idea远程debugger

前言

idea远程debugger项目能排查出一些在本地复现不了,但在jar包上或者现场环境中出现的一些问题。作者以一次工作中实际遇到的问题为例,顺带记录下如何用idea远程debugger

jar包中File 文件找不到的异常排查与解决

在一次工作中,我将springboot项目打成jar包,然后就出现了File Not Find的异常。我的代码如下所示

public String getFileContent(Resource resource){
	File file = resource.getFile();
	try(FileInputStream fis = new FileInputStream(file)){
		byte[] bytes = new bytes[fs.available()];
		fs.read(bytes);
		return new String(bytes);
	} catch(Exception e){
		...
	}
	return null;
}
  • 造成在本地环境中没问题,但是在jar包环境中出问题的原因大致如下(参考博客传送门):
    • 由于本地环境是以相对路径的方式获取目标文件的,所以是没问题的;
    • 但打成jar包后,因为jar包是一个单独的文件而非文件夹,所以不能以相对路径或绝对路径来获取jar包中内部的文件。
// 解决方法:以流的方式进行读操作
public String getFileContent(Resource resource){
	StringBuilder sb = new StringBuilder();
	try(InputStreamReader isr = new InputStreamReader(resource.getInputStream(), StandardCharset.UTF-8)){
		BufferedReader br = new BufferedReader(isr);
		String line;
		while((line = br.readLine) != null){
			sb.append(line);
		}
		return sb.toString();
	} catch(Exception e){
		...
	}
	return null;
}

远程调试排查

在本地开发环境中,我一直复现不了这个问题。但是一用jar包来启动,就会报文件找不到。这时候我就想通过远程调试jar的方式来排查问题

  • 第一步:配置idea远程调试
    在这里插入图片描述

  • 第二步
    确保idea所在的网络能ping通目标要debugger的jar包的网络

  • 第三步
    启动jar包

java -Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8999 -jar ./xxx.jar

然后jar包打印如下图所示,则表示成功监听8999端口,时刻准备被远程调试
在这里插入图片描述

  • 第四步
    选择刚刚配置的remote进行启动
    在这里插入图片描述
    然后控制台打印出这句话,并且一直在运行中。代表成功开启远程调试了。
    在这里插入图片描述
    要注意的是,远程debugger的jar包的classes要跟本地代码的classes一致,否则可能会由于代码不一致而无法调试。

  • 补充
    idea远程debugger实战视频传送门

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫985

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值