栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

idea远程debugger

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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实战视频传送门

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号