IDEA 调试起来太费劲?你需要了解这几招!
各位好啊,我是会编程的蜗牛,我们在使用IDEA开发java项目时,经常需要用到IDEA的调试功能,不过平时我们用的调试方法可能过于简单了,其实IDEA还给我们提供了非常强大的调试功能,下面让我来看一看,相信看完一定会有所收获的。
一、条件断点
循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。
参考上图,在断点的位置,右击断点旁边的小红点,会出来一个界面,在Condition这里填入断点条件即可,这样调试时,就会自动停在i=10的位置
二、回到"上一步"
该技巧最适合特别复杂的方法套方法的场景,好不容易跑起来,一不小心手一抖,断点过去了,想回过头看看刚才的变量值,如果不知道该技巧,只能再跑一遍。
参考上图,method1方法调用method2,当前断点的位置j=100,点击上图红色箭头位置的Drop Frame图标后,时间穿越了
回到了method1刚开始调用的时候,变量i变成了99,没毛病吧,老铁们,是不是很6 :)
注:好奇心是人类进步的阶梯,如果想知道为啥这个功能叫Drop Frame,而不是类似Back To Previous 之类的,可以去翻翻JVM的书,JVM内部以栈帧为单位保存线程的运行状态,drop frame即扔掉当前运行的栈帧,这样当前“指针”的位置,就自然到了上一帧的位置。
三、多线程调试
多线程同时运行时,谁先执行,谁后执行,完全是看CPU心情的,无法控制先后,运行时可能没什么问题,但是调试时就比较麻烦了,最明显的就是断点乱跳,一会儿停这个线程,一会儿停在另一个线程,比如下图:
如果想希望下一个断点位置是第2句诗句,可能要失望了:
如果想让线程在调试时,想按自己的愿意来,让它停在哪个线程就停在哪个线程,可以在图中3个断点的小红点上右击,
即:Suspend挂起的条件是按每个线程来,而非All。把这3个断点都这么设置后,再来一发试试
注意上图中的红框位置,断点停下来时,这个下拉框可以看到各个线程(注:给线程起个容易识别的名字是个好习惯!),我们可以选择线程“天空中的飞鸟”
断点如愿停在了第2句诗。
四、远程调试
这也是一个装B的利器,本机不用启动项目,只要有源代码,可以在本机直接远程调试服务器上的代码,打开姿势如下:
4.1 项目启动时,先允许远程调试
java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081 -Djava.ext.dirs=. ${main_class}
起作用的就是
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081
注意:远程调试从技术上讲,就是在本机与远程建立scoket通讯,所以端口不要冲突,而且本机要允许访问远程端口,另外这一段参数,放要在-jar 或 ${main_class}的前面
4.2 idea中设置远程调试
然后就可以调试了
前提是本机有项目的源代码 ,在需要的地方打个断点,然后访问一个远程的url试试,断点就会停下来。
五、临时执行表达式/修改变量的运行值
调试时,可以临时执行一些表达式,参考下图:点击这二个图标中的任何1个都可以
点击+号后,就可以在新出现的输入框里输入表达式,比如i+5
然后回车,马上就能看到结果
当然,如果调试时,想动态修改变量的值,也很容易,在变量上右击,然后选择Set Value,剩下的事,地球人都知道。
善用上述调试技巧,相当大家撸起代码来会更有感觉,祝大家周末愉快!
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
IDEA 调试起来太费劲?你需要了解这几招!的更多相关文章
- Linux下安装mysql5.6.11(找点有用的信息太费劲)(转)
Linux下安装mysql5.6.11(找点有用的信息太费劲) (2013-04-25 10:25:09) 1.申请阿里云Linux服务器 昨天在阿里云申请了一个免费试用5天的Linux云服务 ...
- eclipse缓存太重,新手最容易中招
有4种方法,从上到下清理:
- Lombok好用是好用,就是容易踩坑,这份避坑指南请查收
序言 各位好啊,我是会编程的蜗牛,作为java开发者,我们平常在开发过程中,总是希望能够尽量少敲代码.这一方面,当然是为了偷懒,另一方面,当然也是为了代码看起来更加简洁一点,不断往编程规范上靠.然后其 ...
- JetBrains Fleet初体验,如何运行一个java项目
序言 各位好啊,我是会编程的蜗牛,JetBrains 日前宣布其打造的下一代 IDE Fleet 正式推出公共预览版,现已开放下载.作为java开发者,对于JetBrains开发的全家桶可以说是印象深 ...
- 如何用Virtualbox搭建一个虚拟机
序言 各位好啊,我是会编程的蜗牛,作为java开发者,我们肯定会接触Linux服务器,除了使用云服务搭建Linux服务器外,我们一般也可以在自己的电脑上安装虚拟机来搭建Linux服务器用于各种功能的验 ...
- postman一些你不常用的实用技巧,竟然还能这么玩
序言 各位好啊,我是会编程的蜗牛,作为java开发者,平时调试接口的时候,肯定需要用到接口调试工具,或者Swagger之类的.Swagger的优势在于它可以将后台加的一些接口注释信息直接展示出来,但是 ...
- java程序员在交接别人的工作时如何保证顺利交接?
序言 各位好啊,我是会编程的蜗牛,作为java开发者,尤其是在职场混迹了多年的老手,肯定会遇到同事离职的情况,或者自己跳槽的情况,这些都免不了需要做好交接工作,不管是别人交接给我们,还是我们交接给别人 ...
- 如何在CentOS7上搭建自己的GitLab仓库
序言 各位好啊,我是会编程的蜗牛,作为java开发者,在团队开发中,一般都是需要使用git及git仓库来管理我们的代码的,这非常方便.我以前在小公司的时候,基本都是一个人开发一个项目,所以也没有怎么接 ...
- Android stadio 调试太掉了
1.evalute expresstion 可以看任何变量的任何属性,就算是一个字符串url,你可以url.length(),你不用输入完就有提示.对象的方法有提示! 2.调试技巧 就是当一行里面有很 ...
随机推荐
- 2505-springboot使用spring.profiles.active来分区配置
参考文献: spring boot 入门 使用spring.profiles.active来分区配置 http://www.leftso.com/blog/111.html 很多时候,我们项目在开发环 ...
- html的基础01
1.什么是网页 2.常用的浏览器有哪些 3.web标准是什么 1.什么是网页 2.常用的浏览器 360.百度那些都是国产浏览器,内核一样,以上六个都是国际浏览器,不同厂商生产(但IE和Edge都是 ...
- ERROR: null value in column "name" of relation "res_company" violates not-null constraint
1 # 创建res.company公司信息的时候,发现它执行了两次create()方法,并且第二次调用create,传了一个[{}]做为参数 2 # 原因是,你创建res.company的时候并没有指 ...
- C#反射跟特性
一.什么是反射? 了解反射之前我们必须知道一个概念--元数据.有关程序和程序类型的信息叫做元数据,通俗的解释就是类里面的方法.属性.字段等. 而程序在运行的时候去查看其它程序集的行为就叫做反射.在我们 ...
- 张高兴的 .NET IoT 入门指南:(八)基于 GPS 的 NTP 时间同步服务器
时间究竟是什么?这既可以是一个哲学问题,也可以是一个物理问题.古人对太阳进行观测,利用太阳的投影发明了日晷,定义了最初的时间.随着科技的发展,天文观测的精度也越来越准确,人们发现地球的自转并不是完全一 ...
- 浅淡 Apache Kylin 与 ClickHouse 的对比
作者简介 周耀,Kyligence 解决方案架构师,Apache Kylin.Apache Superset Contributor. Apache Kylin 和 ClickHouse 都是目前市场 ...
- [网鼎杯2018]Unfinish-1|SQL注入|二次注入
1.进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下: 2.进行目录扫描,发现了注册界面:register.php,结果如下: 3.那就访问注册界面, ...
- Silk语言-中国人自己的开源编程语言
什么是Silk Silk语言是一门完全独立自主开发的跨平台动态类型编程语言,绝非"木兰"等套壳语言. Silk简单易学,30分钟即可掌握全部语法,让你像Python一样简单地写C/ ...
- 【java】IDEA-jar包导出与导入
导出步骤: 1.CTRL + SHIFT + ALT + S 2.选择:Artifacts ,点击"+",在添加页面中选择:JAR-From modules with depend ...
- 通过VS下载的NuGet包,如何修改其下载存放路径?
一.了解NuGet包的默认存放路径 我们通过NuGet包管理器下载的引用包,默认是存放在C盘的,存储路径一般是: C:\Users\{系统用户名}\.nuget\packages 我们都知道,C盘的存 ...