1

因此,我在调试 Netbeans Java 应用程序时注意到,当在断言函数中使用函数调用时,您无法在该函数中命中断点或单步执行该函数。

起初我认为它必须与使用覆盖函数和我的覆盖函数没有被调用有关,但我确认这不是正在发生的事情。它仍然会被调用,但无法进入。

这是我尝试过的片段:

public class Example
{
    public static boolean blah()
    {
        System.out.println("Executing");    //**Breakpoint here
        return true;
    }

    public static void main(String[] args)
    {
        assert(blah());    //Cannot step into or hit breakpoint on this line.
        blah();            //Can here.
    }
}

有人知道为什么这不起作用吗?

4

2 回答 2

5

默认情况下,断言在运行时被禁用。

也许您的调试 JVM 没有启用断言。

要启用断言,请为您的 NetBeans 调试 JVM 参数指定-enableassertions(或 - ea)开关。即使断言被编译到字节码中,如果没有这个开关,它们也不会执行。

有关更多信息,请参阅此链接

于 2012-07-11T19:43:37.603 回答
2

也许,只是也许,每个assert语句在这个构建中都被优化了?你确定你的打印语句被执行了两次吗?

的全部意义assert在于,当您想要优化代码时,您可以告诉编译器忽略内部的内容。

于 2012-07-11T19:39:08.727 回答