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ステートメントが最適化されているのではないでしょうか? print ステートメントが 2 回実行されていますか?

要点はassert、コードを最適化したいときに、内部の内容を無視するようにコンパイラーに指示できることです。

于 2012-07-11T19:39:08.727 に答える