zoukankan      html  css  js  c++  java
  • 记录一次intellij idea中的下断点过程

    前言:

    ​ 最近在学习某个看起来有点复杂的框架,我想知道它的数据访问是如何发生的。所以我选择对foodCartViewRepository进行操作的方法下断点,看看这些函数是何时被调用的。

    以下的操作都是在intellij idea中完成的。

    行断点和logger

    一开始的时候,我选择的是很传统的行断点。

    image-20211023222827695

    然后在我开始调试的时候,我哭了,因为我没想到这个断点一直被触发,导致程序的运行磕磕绊绊的,很是难受

    后来我想到了,使用logger来输出一些相关的对象

    image-20211023223532951

    这样的方式是很好的,程序运行起来的时候不会出现磕磕绊绊的,并且可以在“非调试”环境下观察程序的运行情况

    然而这样的方式好像有一个缺点,在需要观察多个函数的执行情况的时候, 需要在很多地方写很多麻烦的log代码。感觉这样好像也不是太方便

    字段断点

    后面我思考了以下,我原本只想知道的是foodCartViewRepository这个对象的执行情况。

    并且,在 intellij idea中,可以设置“高级”断点。

    foodCartViewRepository字段的行号右边点击一下,就可以创建出针对这个字段的断点(图标是一个眼睛的形状)。

    image-20211023224231237

    当我们右击这个眼睛的时候,可以在弹窗中,对这个断点的细节进行设置。

    image-20211023224208441

    取消勾选Suspend这个框后,可以发现眼睛变成了黄色,这表示程序不会暂停(Suspend)在这个地方,这样就不会出现磕磕绊绊的情况了。

    image-20211023225037101

    这时读者可能会想,不能暂停的断点有啥用呢?其实就算是程序不能暂停,我们仍然可以像使用logger那样,获取一些程序的执行情况。

    对刚才那个断点,我们可以进行下面的设置,这样就可以提供类似logger的功能了。

    image-20211023230011846

    以调试模式运行程序,我们可以看到一些这个断点给我们提供的信息!

    image-20211023225927803

    但是,我发现,程序的启动变得十分缓慢,从点击调试运行的按钮到程序完全启动,大概花了一两分钟。然而,在非调试情况下(正常模式),程序的启动只需要十秒左右。因此,开启“字段断点”后的调试启动速度让人有点“难以接受”。

    综合使用断点

    我发现,可以在程序刚开始运行的时候,mute所有的断点

    image-20211023230831650

    于是,一开始程序运行的时候,这些断点是出于Muted的状态的,在我认为程序完全启动之后,我手动unmute这些断点。经过测试,程序的启动速度确实变快了不少,然而,在我unmute这些断点后,我发现,这些断点并没有给我任何log信息。原来是我手动unmute断点的时间晚了。只要在程序完全启动的时候,unmute断点,这样,我就不会错过断点了

    下图的红框中的设置,表明我们可以在某个断点出发后,启用这个断点。

    image-20211023231500960

    在SpringBoot项目完全启动后,下一个断点在自己的代码上。这个断点用来“通知”foodCartViewRepository断点,这个断点是黄色的,因为程序不会暂停Suspend在这里

    image-20211023231932630

    然后针对foodCartViewRepository字段断点(注意黄框,这个断点是Enabled的,只是,在红框中的设置,使得这个断点在程序完全启动前(前面设置的那个断点)是出于禁止的状态)

    image-20211023232531397

    这样,以调试模式启动程序的时候,时间花费不会太长,并且,我们可以完整的追踪foodCartViewRepository的访问情况。完美!!

    小结

    简单的情况下,使用行断点

    非调试情况下查看程序的运行情况,使用logger

    查看对字段的访问和修改,使用字段断点

    比较复杂的情况,综合使用断点。

  • 相关阅读:
    vim常用命令总结
    深度学习之 GAN 进行 mnist 图片的生成
    javascript 中的类型
    架构设计小思
    [前端]如何让图片等比例缩放,同时撑满父级容器的长或宽
    深度学习之 seq2seq 进行 英文到法文的翻译
    深度学习之 cnn 进行 CIFAR10 分类
    深度学习之 rnn 台词生成
    深度学习之 mnist 手写数字识别
    前端页面,使用 dom 鼠标拖拽画一个矩形和监听键盘
  • 原文地址:https://www.cnblogs.com/Blithe-Chiang/p/breakpoint-in-intellij-idea.html
Copyright © 2011-2022 走看看