因此,我在调试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.
}
}
任何人都有任何想法为什么这不起作用?
答案 0 :(得分:5)
默认情况下,断言在运行时被禁用。
也许您的调试JVM没有启用断言。
要启用断言,请为NetBeans调试JVM参数指定-enableassertions
(或 - ea
)开关。即使将断言编译到字节码中,如果没有此切换,它们也不会执行。
有关详情,请参阅this link
答案 1 :(得分:2)
也许,只是也许,每个assert
语句都在这个版本中进行了优化?你确定你的print语句被执行了两次吗?
assert
的重点在于,您可以告诉编译器在您想要优化代码时忽略内部的内容。