IDEA的断点调试(DEBUG)

IDEA的断点调试(DEBUG)

一. DEBUG界面主要按钮

在这里插入图片描述

  1. 在这里插入图片描述Show Execution Point:回到当前激活的断点处。效果:若你鼠标现在在别的页面/别的类上面,点击它快速“归位”
  2. 在这里插入图片描述Step Over步过:也叫单步调试,一行一行往下走,若这一行是方法也不会进入里面去。这个应该是平时使用得最多的按钮了,没有之一。
  3. 在这里插入图片描述Step Into步入:进入方法体内部。这里的方法指的你自定义的方法or三方库的方法,不会进入到JDK官方的方法里(如System.out.println()这种它是不会进去的)
  4. 在这里插入图片描述Force Step Into强制步入:能进入任何方法,包括JDK的。一般查看底层源码才会用到它
  5. 在这里插入图片描述Step Out步出:它是搭配(Force) Step Into一起使用的,当通过step into进入到方法体内部想出来时,一般有两种方案:单步调试慢慢出来,另一个就是step out(推荐)
  6. 在这里插入图片描述Drop frame:回到当前方法的调用处,同时上下文内所有的变量的值也回到那个时候。该按钮能够点击的前提条件是:当前所处的方法有上级方法,如果你是main方法里,那么按钮就是灰色喽
  7. 在这里插入图片描述Run to Cursor运行到光标处:你想要代码在哪里停一下,就把光标放在哪就成。
  8. 在这里插入图片描述Evaluate Expression表达式计算器:看图标就是个计算器嘛,所以你可以在这里执行任何合法的表达式
  9. 在这里插入图片描述Trace Current Stream Chain跟踪当前Stream流:只有代码停在Stream流语句上,此图标才点亮可以被点击。
  10. 在这里插入图片描述
    Resume Program:恢复程序。当断点激活时程序“停止”了,点击这个按钮就是恢复的意思。
  11. 在这里插入图片描述
    View Breakpoints:打开断点管理窗口。
  12. 在这里插入图片描述
    Mute Breakpoints:作用是让所有断点变为灰色,也就是说让它们失效。它是一个批量操作,操作对象是所有断点,而不可针对于某一个。
  13. 在这里插入图片描述
    Get Thread Dump:拿到当前线程的dump,可以查看到当前线程的状态。
  14. 在这里插入图片描述
    不显示类库的方法,只显示你自己写的方法。
  15. 在这里插入图片描述
    智能步入:自动定位到当前断点行,并列出需要进入的方法。如果只有一个方法,则直接进入,类似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()方法
  • 变量跟踪:重点关注某几个变量,就可以使用Watches

3.1. 动态改变变量值

通过setValue可以手动的设置变量值
在这里插入图片描述

3.2. 断点条件设置

当condition里的条件为真时该断点才会被触发
在这里插入图片描述

四. 计算表达式

4.1 查看方法返回值

在这里插入图片描述

4.2 设置变量

在这里插入图片描述

五. 多线程调试

首先把断点打在下图如示地方:
在这里插入图片描述

会发现在调用栈中,所有的线程都被挂起了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-19Y9OoXc-1638882737097)(C:\Users\chenxinyue_a\AppData\Roaming\Typora\typora-user-images\image-20211207205859362.png)]

把断点改为只挂起当前线程

在这里插入图片描述

会发现只挂起了main线程,线程一和线程二正常跑完
在这里插入图片描述

当断点打在run方法中
在这里插入图片描述

在调用栈中切换线程是不消耗上下文的
在这里插入图片描述

六. 远程调试

第一步:让远程部署的那个应用支持远程调试,也就是暴露远程调试端口。方式方法为在应用启动时加上对应的JVM参数即可

第二步:用IDEA创建一个remote运行配置,填上远程主机的ip + 暴露的调试端口即可
在这里插入图片描述

七. DEMO地址

https://gitee.com/uprayup/debug-demo.git

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值