文章目录
IDEA的断点调试(DEBUG)一. DEBUG界面主要按钮二. DEBUG常用的四种方式2.1. 行断点2.2. 方法断点2.3. 属性断点2.4. 异常断点2.5. 临时行断点 三. 变量区与变量跟踪3.1. 动态改变变量值3.2. 断点条件设置 四. 计算表达式4.1 查看方法返回值4.2 设置变量 五. 多线程调试六. 远程调试七. DEMO地址IDEA的断点调试(DEBUG)
一. DEBUG界面主要按钮
Show Execution Point:回到当前激活的断点处。效果:若你鼠标现在在别的页面/别的类上面,点击它快速“归位”Step Over步过:也叫单步调试,一行一行往下走,若这一行是方法也不会进入里面去。这个应该是平时使用得最多的按钮了,没有之一。Step Into步入:进入方法体内部。这里的方法指的你自定义的方法or三方库的方法,不会进入到JDK官方的方法里(如System.out.println()这种它是不会进去的)Force Step Into强制步入:能进入任何方法,包括JDK的。一般查看底层源码才会用到它Step Out步出:它是搭配(Force) Step Into一起使用的,当通过step into进入到方法体内部想出来时,一般有两种方案:单步调试慢慢出来,另一个就是step out(推荐)Drop frame:回到当前方法的调用处,同时上下文内所有的变量的值也回到那个时候。该按钮能够点击的前提条件是:当前所处的方法有上级方法,如果你是main方法里,那么按钮就是灰色喽Run to Cursor运行到光标处:你想要代码在哪里停一下,就把光标放在哪就成。Evaluate Expression表达式计算器:看图标就是个计算器嘛,所以你可以在这里执行任何合法的表达式Trace Current Stream Chain跟踪当前Stream流:只有代码停在Stream流语句上,此图标才点亮可以被点击。Resume Program:恢复程序。当断点激活时程序“停止”了,点击这个按钮就是恢复的意思。
View Breakpoints:打开断点管理窗口。
Mute Breakpoints:作用是让所有断点变为灰色,也就是说让它们失效。它是一个批量操作,操作对象是所有断点,而不可针对于某一个。
Get Thread Dump:拿到当前线程的dump,可以查看到当前线程的状态。
不显示类库的方法,只显示你自己写的方法。
智能步入:自动定位到当前断点行,并列出需要进入的方法。如果只有一个方法,则直接进入,类似Force Step Into。
二. DEBUG常用的四种方式
2.1. 行断点
Breakpoint hit message:断点激活时输出提示日志Stack trace:断点激活时输出程序调用栈信息Evaluate and log:选择需要输出计算表达式的值。你可选择当前可达的变量2.2. 方法断点
Emulated:仿真。作用:提高调试性能
Method entry:进入方法时激活断点
Method exit:出去方法时激活断点
2.3. 属性断点
Filed Access:读取此属性时(写入时不管)Filed modification:写入此属性时(读取时不管)2.4. 异常断点
Catch excetion:只有当你自己try-catch了这个异常才会激活断点Uncatch excetion:只有当你自己不try-catch时才会激活断点2.5. 临时行断点
走一次就会消失的行断点
三. 变量区与变量跟踪
变量区:在此区域可以查看当前断点上下文范围内的所有变量值(即使不在本类内也可以点过去查看哦),包括static静态的。此区域里的变量IDEA会自动调用其toString()
方法变量跟踪:重点关注某几个变量,就可以使用Watches3.1. 动态改变变量值
通过setValue可以手动的设置变量值
3.2. 断点条件设置
当condition里的条件为真时该断点才会被触发
四. 计算表达式
4.1 查看方法返回值
4.2 设置变量
五. 多线程调试
首先把断点打在下图如示地方:
会发现在调用栈中,所有的线程都被挂起了
把断点改为只挂起当前线程
会发现只挂起了main线程,线程一和线程二正常跑完
当断点打在run方法中
在调用栈中切换线程是不消耗上下文的
六. 远程调试
第一步:让远程部署的那个应用支持远程调试,也就是暴露远程调试端口。方式方法为在应用启动时加上对应的JVM参数即可
第二步:用IDEA创建一个remote运行配置,填上远程主机的ip + 暴露的调试端口即可
七. DEMO地址
/uprayup/debug-demo.git