蹲厕所的熊

benjaminwhx

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

2018-08-26 作者: 吴海旭


  1. 条件断点
  2. Drop Frame
  3. 远程调试
  4. 临时执行表达式/修改变量的运行值

条件断点

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

idea1

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

Drop Frame

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

idea2

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

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

远程调试

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

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

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

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

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

idea3

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

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

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

idea4

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

idea5

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



坚持原创技术分享,您的支持将鼓励我继续创作!



分享

评论