Intellij idea 为什么调试断点不影响我的lamda函数(java8使用idea)?

Intellij idea 为什么调试断点不影响我的lamda函数(java8使用idea)?,intellij-idea,lambda,java-8,Intellij Idea,Lambda,Java 8,版本:IDEA 2019.3 JDK8 尝试过的方法: 我想用大括号把它包起来 在全球范围内,只有一个断点被命中,没有一个断点生效 程序直接进入保存方法 public <V0 extends Rmap> Output<V0> prior(Trans<V0, Rmap> conv) { return saving(ds0 -> { enqueue((DSdream) ds0.map((Function<

版本:IDEA 2019.3 JDK8

尝试过的方法:

  • 我想用大括号把它包起来

  • 在全球范围内,只有一个断点被命中,没有一个断点生效

  • 程序直接进入保存方法

        public <V0 extends Rmap> Output<V0> prior(Trans<V0, Rmap> conv) {
            return saving(ds0 -> {
                enqueue((DSdream) ds0.map((Function<Rmap, Rmap>) row -> {
                    Rmap r = conv.apply((V0) row);
                    return Rec.of(r, tds.get(r.table().toString()));
                }, f));
            });
        }
    
    公共输出优先(Trans-conv){
    返回保存(ds0->{
    排队((DSdream)ds0.map((函数)行->{
    Rmap r=conv.apply((V0)行);
    返回Rec.of(r,tds.get(r.table().toString());
    },f));
    });
    }
    
    如何在lambda断点处停车


    谢谢

    我尝试使用一个匿名的内部类,它通常会在断点处停止

        @Override
        public <V0 extends Rmap> Output<V0> prior(Trans<V0, Rmap> conv) {
            Output<Rmap> saving = saving(new Consumer<DSdream>() {
                @Override
                public void accept(DSdream dSdream) {
                    enqueue((DSdream)
                            dSdream.map((Function<Rmap, Rmap>) row -> {
                                Rmap r = conv.apply((V0) row);
                                return Rec.of(r, tds.get(r.table().toString()));
                            }, f));
                }
            });
            return (Output<V0>) saving;
        }
    
    @覆盖
    公共输出优先(Trans-conv){
    输出保存=保存(新消费者(){
    @凌驾
    公共无效接受(DSdream DSdream){
    排队((DSdream)
    dSdream.map((函数)行->{
    Rmap r=conv.apply((V0)行);
    返回Rec.of(r,tds.get(r.table().toString());
    },f));
    }
    });
    返回(输出)保存;
    }
    
    据推测,反编译后,lambda被编译到内部类中, 因此无法定位断点。
    这应该是lambda的缺点

    请内联发布代码,不要发布IDE的屏幕截图。您是否确保断点行上的代码已实际执行?启动调试会话时-检查断点是否有状态。在启动调试之前,请尝试build | Rebuild操作。检查断点设置-已启用挂起。未发生反编译。此外,lambda表达式被编译为其包含类的方法。lambda表达式中的断点没有问题。你的问题是合乎逻辑的;由于
    accept
    方法在调用
    saving
    方法之前未被调用,因此
    accept
    方法中的断点也不能在调用之前命中。匿名内部类不会改变这一点。我有点困惑,lambda不是顺序执行吗?因为我不知道你的
    保存方法是做什么的,所以我不能说它是否会顺序执行使用者的代码。甚至可能该方法根本不调用它。可以肯定的是,您的
    previor
    没有调用
    accept
    方法(或者您是否在代码中看到
    accept
    调用?)。您正在创建对象并将其传递给
    saving
    方法,并且
    saving
    方法可能会调用对象上的方法。因此,当然,在进入
    保存方法之前不会碰到断点。我明白你的意思。代码太大,无法复制,我应该将问题抽象到小演示中。