暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Idea中那些鲜为人知的调试技巧

蹲厕所的熊 2018-08-20
322

蹲厕所的熊 转载请注明原创出处,谢谢!

条件断点

当我们在for循环或者遍历集合的时候,很希望让断点停在我们想让它停的地方,也就是想让断点按照一个条件来执行。

上图中,右击断点会弹出弹出框。当条件 i==3
满足的时候,程序才会在断点的地方停留。而右边的 Thread
选项选中了则代表多个线程都命中条件的时候会依次等待。

Drop Frame

有的时候我们在一些特写复杂的方法套方法的场景中,不小心断点走过去了,想回过头看看刚才的变量值,如果不知道该技巧,只能重新跑一遍。

上图中Debugger图标下有一个 Frames
的窗口,窗口里显示了从main开始所有的调用方法,我们试着点击一下 DropFrame
,会发现光标所在的24行突然跳到了20行(method2的开始调用处),如果再点击一下,光标就会跳到15行(method1的开始调用处)

做这些操作的同时,会发现 Frames
窗口里的值在不断变化。这里变化的每一行其实对应的就是一次方法调用压栈的信息。而 DropFrame
也就是放弃当前的函数堆栈,让你重新来过整个函数的调用,这也是为什么这个功能叫 DropFrame
的原因。

远程调试

当你对测试环境出现的问题无法准确定位,只能一行行苦逼的review代码时,我确定你需要这么一个调试利器。

首先,要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:

  1. -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}

其中的${debug_port}是用户自定义的,为debug端口,本例以 8000
端口为例。注意:服务器要打开debug端口,不然即使加上了参数也无法访问!!!

接着,打开Idea,在顶部靠右的地方选择”Edit Configurations…”,进去之后点击+号,选择”Remote”,没什么特殊的只需要修改 Host
Port
,最后点击Apply保存即可。

接着,服务器运行后点击Idea的Debug按钮,服务调用起来后就会定位到本地了(前提是服务器的代码和本地需要保持一致)

临时执行表达式/修改变量的运行值

我们在debug的时候,经常会需要执行一些额外的表达式。参考下图:点击这二个图标中的任何1个都可以。

当执行到断点所在地,如果我们不想改代码但是想测试list为空的情况,这时候我们就可以临时改变list的值变为null。

执行完 list.clear()
后放开断点,输出的结果为 null



如果读完觉得有收获的话,欢迎点赞、关注、加公众号【蹲厕所的熊】,查阅更多精彩历史!!!

文章转载自蹲厕所的熊,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论