• Debug技巧


    多线程调试

    有些时候为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下。 

    在IDE里断点停下来的时候,可以切换到另外的线程中,跑其他的代码,不会互相影响。这里是有个开关的,在Eclipse里默认开启,

    在IntelliJ IDEA里默认是没有开启的。也就是说如果你在IDEA里代码里加断点,虽然一个线程的断了下来,但其他线程的已经执行过了。此处把线程的suspend设置成和Eclipse模式一样之后,也可以开始多线程应用的调试。简单设置可以直接在断点处,将suspend改成Thread。

    一个线程断下来之后,可以通过在Debug->Frame窗口切换,到其它线程中继续运行。

    PS:创建线程时建议起一个有意义的名字,否则在调试的时候都不能区分出哪个是自己的线程。

    后退执行

    在IDE里被称为Drop Frame。给你重新一次机会进入当前方法,回退至调用处。

     

    我们在Drop 了当前这个Frame之后,已经改变的变量值不会恢复。比如你向当前调用方法里传入了一个List,并且在方法中向List里添加了内容,那在Drop到调用该方法的地方时,List不会恢复到之前的状态。但是在该方法再次被调用时,你可以观察List什么时候被改变的,至少不需要再重跑一遍程序了。甚至你可以一言不合就后退。

    条件断点

    为了调试代码,就需要在要观察变更的地方添加断点,然后小心翼翼的一步步执行。但是如果是在一个循环里,又或者该方法会被多线程同时调用到的时候,你小心的向下单步调试,发现没有你关心的内容,又从循环开始处跑下来,还是没你的内容,人就开始烦燥起来。

    其实,在添加断点的时候,我们可以为断点增加一定的条件,这样,在指定的条件满足时,断点才会生效。

    设置值&执行代码段

  • 相关阅读:
    Linux下vi和vim模式相互切换
    Linux文件系统目录
    华硕笔记本(UEFI)支持U盘启动
    什么是RSS feed?订阅RSS有什么好处?
    JSTL的时间格式化标签的使用
    token session区别 以及JWT无状态token
    c++ 重载成员函数的地址如何获取
    c++ __VA_ARGS__
    协程任务调度器
    yield return 1
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/9297824.html
Copyright © 2020-2023  润新知