zoukankan      html  css  js  c++  java
  • Debug模式调试技巧

    Debug模式调试技巧

    断点管理窗口

     菜单栏方式

     Run -> view breakpoints

     Actions方式

     双击shift调出Actions窗口,输入view breakpoints即可打开

     任意断点处鼠标右键

     选择more即可打开管理窗口

     快捷键

     Ctrl + Shift + F8

    操作面板

     

    调试按钮

     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

     表达式计算器,你可以在这里执行任何合法的表达式

    方法调用栈

     显示当前方法(位于栈顶)所经过的所有方法。

     说明:点击右上角的小漏斗图标可以不显示类库的方法,只显示你自己写的方法,方便调试

     

    变量区Variables

     

    Watches变量跟踪

     有的时候变量很多,而只需要重点关注某几个变量,就可以使用Watches。

     

    为何调试窗口没自动打开?

     明明断点激活了(程序暂停了),但是那个“操作面板”并没有出来,怎么破?

     

    多线程调试

     多线程程序的好处固然不用多说,但总所周知它调试起来是比较困难的,比如这段:

     

     这个时候如果你想研究await()方法的实现,需要具备的前提条件是多个线程进入,因此需要hold住多个线程。若只是在await()这一行打个普通的行断点,那结果是这样子的:

     所有线程都是Running状态,显示这是不可能的,因为总共只有3个另外,拿完了其它的都得等待才对,所以这个根本就不是真实的执行场景,也就不可能跟踪到await()方法里面去探究其实现。

     为了模拟出这种场景进行调试,就对断点阻塞条件设置为这样

     再次运行程序,线程情况如下:

    主动抛出异常

     需求场景:你写了一个全局异常组件,现在想测试它生效情况如何,那么时候你就需要主动抛出这种异常,一般的做法是形如这样

     使用场景

     知晓了异常断点的作用和触发条件,使用场景就有啦。比如当你的程序抛出了一个异常,但是一时半会你并不知道是哪行代码引起的,这个时候通过增加异常断点的方式可以实现迅速的问题定位。

    分支主题 10

    IDEA把断点分为四大类型

     

     Line breakpoint(行断点):图中红色小圆圈。顾名思义,在指定代码行设置断点

     Field watchpoint(属性断点):图中红色小眼睛。打在类的属性(static or 非static)上的断点,作用是在该属性 读取和写入时激活

     Method breakpoint(方法断点):图中红色小菱形。标记在方法签名的那一行,在该方法执行的入口/出口处被激活

     Exception breakpoint(异常断点):红色小闪电。这是一个特殊但很好用的断点,当程序抛出 指定异常时会激活异常断点。和其它断点不同,异常断点是项目 全局的,它不需要打在具体某一行上

     转自:https://my.oschina.net/fangshixiang/blog/4941380

  • 相关阅读:
    [NOIP2020]T2字符串匹配
    【CSGRound2】逐梦者的初心(洛谷11月月赛 II & CSG Round 2 T3)
    【CF1225E Rock Is Push】推岩石
    [HAOI2016]食物链
    求先序排列
    图书管理员
    合并果子
    联合权值
    和为0的4个值
    玩具谜题
  • 原文地址:https://www.cnblogs.com/bwcx1375/p/14594594.html
Copyright © 2011-2022 走看看