前言

目前工作中由于环境复杂等客观因素,无法在本地启动项目进行 Trouble Shooting,需要打开测试环境的 DEBUG 端口,进行远程调试。为了不影响其他用户同时使用测试环境以及相关系统的正常请求,只好再祭出 Intellij IDEA 的 DEBUG 大杀器了。本文主要介绍平时用到几种 DEBUG 高阶用法。

快速上路

安装Intellij IDEA

Intellij IDEA 每次更新都会有些小惊喜,谁用谁知道。

If you don't have intellij idea installed, return.

条件断点

  1. 找到需要断点的代码行,鼠标点击左侧边栏设置断点(CMD + F8 )。好吧我废话了,这个大家都会。
  2. 右击断点,在 Condition 处填入你所需要的判断条件。

3.当 DEBUG 时候断点会停留在 i = 5 的位置。

不暂停断点调试

  1. 依然找到需要断点的代码行。右击设置好的红色断点,选择 More(SHIFT + CMD + F8 ),此时会弹出断点的设置菜单。
  2. 启用不暂停断点,去除 Suspend 勾选框,勾选 “Breakpoint hit” message 以及 Evaluate and log。如果你对代码的调用层次不清楚或者你在阅读学习源码,你可以勾选 “Stack trace”,

配合 Grep Console 插件,调试效果无敌。蓝色部分是我们打印的调试日志,红色框部分记录了断点是否执行以及代码调用的堆栈。

3.条件断点 & 变量值修改:条件断点就不再赘述了,Evaluate and log 不仅可以记录日志而且可以修改变量。如图所示,在 i==5 的时候,我人为添加了一条测试的假数据。

多线程断点调试

多线程调试蛮头疼的,因为代码执行的先后顺序完全看 CPU,断点跳来跳去,这就给调试带来了很多麻烦。IDEA 具备多线程调试的切换能力,你可以按一定顺序来调试线程的代码。

  1. 设置线程断点。右击断点设置 Suspend 挂起条件为 Thread。

2.断点挂起时,可以切换线程进行调试。

“后悔药”可以有

平时调试的过程中经常遇到断点不小心跳过了,想回头再看看刚才的值或者更进一步的 DEBUG,是不是傻头傻脑地重新再跑一遍?

可能你会想到使用代码调用栈返回查看调用情况,但是你没办法在历史的某一步再重新调试。其实 IDEA 提供了返回上一步的功能,这个功能在学习源码的时候特别有用,可以几个断点之间反复来回研究并 DEBUG。

  1. 如下图所示,如果我想回到第一个断点重新执行调试怎么办呢?

2.执行两次 Drop Frame 即可,可以看到 value 的值重新回到 0。

该方法切勿在真实环境中使用!!!因为丢弃栈帧如果没有操作释放干净可能会影响变量的值,导致程序结果与真实结果不一致!!!

结束语

你可能习惯了单步 DEBUG,短时间不会适应不暂停断点的调试方式,然而在复杂的功能场景下,如多线程、多层循环等,这种 DEBUG 方式不仅调试的速度更快,而且更有利于加深对代码整体的理解。

对了,在这里说一下,我目前是在职Java开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01。获取。我这里有最新的Java基础全套视频教程。

clodeblocks debug断点调试_Intellij IDEA高阶DEBUG大杀器相关推荐

  1. python中debug断点调试

    python Debug 断点调试 断点(break point)是指在代码中指定位置,当程序运行到此位置时变中断下来,并让开发者可查看此时各变量的值.因断点中断的程序并没有结束,可以选择继续执行. ...

  2. Java学习日志(八): 可变参数,debug断点调试,静态导入,集合嵌套

    JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇) Java学习日志(八) 可变参数 debug断点调试 静态导入 集合嵌套 可变参数 JDK1.5之后的新特性 作用 ...

  3. python中高阶函数和装饰器_三.Python高阶函数和装饰器

    1高阶函数 1.1 数学概念回顾下数学知识: y=f(x) 这是最开始接触的普通函数 y=g(f(x)) 这个就是我们接触到的高阶函数 在数学和计算机科学中,高阶函数至少应当是满足下面一个条件的函数: ...

  4. python中高阶函数和装饰器_Python高阶函数与装饰器函数的深入讲解

    本文主要介绍的是Python高阶函数与装饰器函数的相关内容,分享给大家,下面话不多说了,来一起看看详细的介绍吧 高阶函数 1.可以使用函数对象作为参数的函数 2.或可以将函数作为返回值的函数 3.函数 ...

  5. JAX-FLUIDS:可压缩两相流的完全可微高阶计算流体动力学求解器

    原文来自微信公众号"编程语言Lab":论文精读 | JAX-FLUIDS:可压缩两相流的完全可微高阶计算流体动力学求解器 搜索关注"编程语言Lab"公众号(HW ...

  6. 并行化-你的高并发大杀器

    作者:咖啡拿铁,现就职于美团点评,后端研发 来自:公众号咖啡拿铁(ID:code_3092860495) 1.前言 想必热爱游戏的同学小时候,都幻想过要是自己要是能像鸣人那样会多重影分身之术,就能一边 ...

  7. clodeblocks debug断点调试_Go 的 Debug 工具 delve 介绍

    以下文章来源于大愚Talk ,作者大愚Talk delve 的汉语意思是:钻研.探索:用这个来命名一个debug工具还是非常的形象. 本文主要介绍该工具的安装与常用使用方法.是一个step-by-st ...

  8. clodeblocks debug断点调试_idea debug调试————简单常用,适合初学者

    背景: 在现在的开发中,如果不会debug,那么将会给我们的开发带来很大的困扰,如果仅仅是依靠日志信息去查问题,将会大大增加我们解决问题的难度,下面说一下idea开发工具下的简单debug. 适用人群 ...

  9. Intellij IDEA 2017 debug断点调试技巧与总结详解篇

    IntelliJ IDEA使用教程 (总目录篇) 在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦. 下面不要在意,这个快捷键具体是啥 ...

最新文章

  1. Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
  2. Android下的Linux
  3. 01.elasticsearch-security_es鉴权机制
  4. PHP基础3_数组,循环及函数
  5. Spring的IOC容器为什么用反射而不用new来创建实例?
  6. int a[5]={1,2,3,4,5}; int *p=(int*)(a+1); printf(%d,*(p-1)); 答案为什么是5?
  7. Spark cluster 部署
  8. Java构造函数执行顺序
  9. 疫情政务问答助手算法冠军开源
  10. linux中下载迅雷链接
  11. vmplayer linux kernel headers
  12. CRM客户管理系统的功能模块有哪些
  13. dwf怎么合成一个_图纸集批量发布单页dwf的方法——院办质量小组
  14. 生成的SMILES以及对应的图像的评价指标【2】
  15. php rsa 模数 指数,密码:使用模数和指数生成RSA私钥
  16. 本机和Docker容器的文件传输
  17. --zigbee物联网工程项目(一)
  18. 清除maven仓库lastUpdated文件
  19. 什么是 PM,什么是 SCM,和 NVM 什么关系?
  20. 轻触开源(二)-Gson项目源码解析_壹

热门文章

  1. 我国中等收入群体为应付生活压力 透支半生财富
  2. CSP认证201409-1 相邻数对[C++题解]:排序
  3. linux signal 符号表,铁路信号图形符号
  4. 关于Webview带参访问服务器
  5. matlab格拉姆施密特,改进的格拉姆-施密特正交化(modified Gram-Schmidt Process)
  6. php in方法,PHP函数in_array()使用详解
  7. java游戏2333整合包,我的世界魔法荣耀
  8. cron表达式 每天0点10分和30分_“提前2小时下班”:学会这10个函数,办公效率提升了10倍!...
  9. 红旗Linux软件开发技术,中科红旗闷声研发下一代红旗Linux 11操作系统
  10. can通道采样频率_CAN总线基础(上)