工作中跟多代码都是在本地跑着觉得没什么问题,然后打包部署,诶,这时候就会有一些我们开发时没有考虑到的问题出现,第一时间肯定是要看日志是哪一块出了问题,但是这样搞很麻烦而且不是很直观,怎么都不如来个debug跟一下来的舒服,很巧,IDEA他是支持这么做的,接下来就来介绍一下他的用法!
准备一个简单的项目
首先准备一个简单的项目部署到服务器,主要就写了一个查询,的接口,本地测试ok后打包部署到服务器的tomcat
@RestController
public class Debugging {
@GetMapping("/demo/1")
public Student demo(){
System.out.println("查询学生!");
Student student = this.query();
System.out.println("查询结果:" + student);
return student;
}
public Student query() {
return new Student("张三", 18, "男");
}
}
设置IDEA
我这个是新版的idea界面和老版本的有些区别,主要是在JDK版本的选择那里,其他的基本都一致
修改tomcat启动脚本
进入tomcat安装目录下bin
vim catalina.sh
加入以下配置,然后重启tomcat
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8081"
配置说明
-Xdebug:通知JVM工作在调试模式下
-Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境。参数同时有一系列的调试选项:
<code>session</code>:指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另外dt_shmem指用共享内存方式,其中dt_shmem只适用于窗口平台.server 参数是指是否支持在服务器模式的虚拟机中。
onthrow:指明当产生该类型的异常时,JVM就会中断下来,进行调式该参数任选。
<code>release</code>:指明当JVM被中断下来时,执行的可执行程序该参数可选
<code>suspend</code><:指明:是否在调试客户端建立起来后,再执行 JVM。
onuncaught(= y或n)指明出现未捕获的异常后,是否中断JVM的执行。