如何根据最终局部变量在匿名内部类中设置条件断点?

发布于 2024-10-13 02:23:05 字数 787 浏览 6 评论 0原文

假设我有以下类,并且想要在标记位置的 arg==null 上设置条件断点。这在 Eclipse 中不起作用,并给出错误“条件断点有编译错误。原因:arg 无法解析为变量”。

我在此处找到了一些相关信息,但即使我将条件更改为“val$arg== null”(val$arg是调试器变量视图中显示的变量名),eclipse给了我同样的错误。

public abstract class Test {

    public static void main(String[] args) {
        Test t1 = foo("123");
        Test t2 = foo(null);
        t1.bar();
        t2.bar();
    }

    abstract void bar();

    static Test foo(final String arg) {
        return new Test() {
            @Override 
                void bar() {
                // I want to set a breakpoint here with the condition "arg==null"
                System.out.println(arg); 
            }
        };
    }
}

suppose I have the following class and want to set a conditional breakpoint on arg==null at the marked location. This won't work in eclipse and gives the error "conditional breakpoint has compilation error(s). Reason: arg cannot be resolved to a variable".

I found some related information here, but even if I change the condition to "val$arg==null" (val$arg is the variable name displayed in the debugger's variable view), eclipse gives me the same error.

public abstract class Test {

    public static void main(String[] args) {
        Test t1 = foo("123");
        Test t2 = foo(null);
        t1.bar();
        t2.bar();
    }

    abstract void bar();

    static Test foo(final String arg) {
        return new Test() {
            @Override 
                void bar() {
                // I want to set a breakpoint here with the condition "arg==null"
                System.out.println(arg); 
            }
        };
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

時窥 2024-10-20 02:23:05

我只能提供一个丑陋的解决方法:

if (arg == null) {
     int foo = 0; // add breakpoint here
}
System.out.println(arg);

I can only offer an ugly workaround:

if (arg == null) {
     int foo = 0; // add breakpoint here
}
System.out.println(arg);
泪冰清 2024-10-20 02:23:05

您可以尝试将参数作为本地类中的字段。

static Test foo(final String arg) {
    return new Test() {
        private final String localArg = arg;
        @Override 
            void bar() {
            // I want to set a breakpoint here with the condition "arg==null"
            System.out.println(localArg); 
        }
    };
}

You could try placing the argument as a field in the local class.

static Test foo(final String arg) {
    return new Test() {
        private final String localArg = arg;
        @Override 
            void bar() {
            // I want to set a breakpoint here with the condition "arg==null"
            System.out.println(localArg); 
        }
    };
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文