springboot 项目在开发完,打成一个 jar 包,放到服务器运行时,如果报错了,怎样排查比较方便?
要是开发环境,我们可以在 IDEA 打上断点,轻松调试,但是现在已经是一个 jar 包在服务器运行着了。
我们可以远程断点调试 jar 包项目吗?
可以。
自己创建一个 springboot 项目,里面很简单,就写一个用来调试的接口:
@GetMapping("/test")
public String test(){
int i = 1 / 0;
System.out.println(i);
return "success";
}
打成 jar 包,上传到一台虚拟机节点,我这里上传到了 192.168.201.4

点击 Edit Configurations

选择 Remote

填写信息
注意:我们只需要修改 Host 那一项就可以了,改成我们远程运行 jar 包的节点 ip

在上一步, IDEA 自动生成了一串东西,就是这个:

复制它 !
去到虚拟机节点下,运行命令启动项目:
java 复制的指令 -jar 包名
我实际的运行命令:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar demo.jar
控制台可以看到,它正在监听 5005 端口

http://192.168.201.4:8087/test

我这里故意让程序抛异常,并打印信息,可以看到,跟我们本地断点有点不一样,IDEA 的控制台是不会输出信息的,我们只能在虚拟机节点的控制台查看

IDEA 的控制台始终显示:

不过堆栈信息,运行中的对象属性等,还是可以在 IDEA 那里看到的
还有,运行的 jar 包的代码和 IDEA 中的代码要保持一致
欢迎指出我的错误!