IntelliJ Ultimate 2018.1中Lambda表达式无法调试的问题求助
解决IntelliJ 2018.1调试Lambda表达式无法进入的问题
我之前也踩过老版本IntelliJ调试Lambda的坑,结合你的情况,给你几个实用的解决方案:
直接在Lambda内部代码行加断点
别只在Lambda的箭头->处加断点,直接点击每个System.out.println行号旁的断点标记,或者在Lambda代码块的第一行加断点。启动调试后,程序运行到这里时应该能直接进入内部执行。开启合成方法调试选项
老版本IntelliJ默认可能关闭了对合成方法的调试支持,而Lambda是编译器生成的合成类/方法,你可以这样设置:- 打开
File > Settings(Windows/Linux)或IntelliJ IDEA > Preferences(Mac) - 导航到
Build, Execution, Deployment > Debugger > Stepping - 勾选
Allow stepping into synthetic methods选项,点击确定后重启调试试试
- 打开
临时替换为匿名内部类调试
如果上面的方法都不行,可以临时把Lambda转换成匿名内部类,调试完成后再改回来,比如你的代码可以改成这样:public TestLambda lambdaExpression() { int width=10; // 替换Lambda为匿名内部类 return new TestLambda() { @Override public void draw() { // 假设TestLambda是包含draw方法的函数式接口 System.out.println("Drawing "+width); System.out.println("Drawing1 "+width); System.out.println("Drawing2 "+width); } }; }匿名内部类的调试支持在老版本IDE里更稳定,肯定能进入每一行代码。
考虑升级IDE版本(可选)
如果你能升级的话,IntelliJ 2019及以后的版本对Lambda和Stream的调试支持有很大提升,Java Stream Debugger也能正常使用,从根本上解决这类问题。
内容的提问来源于stack exchange,提问作者JTN
相关产品推荐
相关产品推荐

