アサーションは、実行時にデバッグと本番環境でそれぞれ有効/無効にできることを知っています。ただし、アサーションによって生成されるバイナリのサイズも大きくなることがわかりました(以下の例では約100〜200バイト)。
#define NDEBUG
CおよびC++では、 beforeを使用することで、コンパイル時にこれを実行できます#include <assert.h>
。
Javaコンパイラがこれを自動的に行う方法はありますか?後でデバッグするために、ソースコードに残しておきたいと思います。ただし、結果のバイナリが必要以上に大きくなることも望ましくありません(設計要件としてサイズ制限があります)。
Cコード:
//#define NDEBUG
#include <assert.h>
int main(void) {
assert(0); // +200 bytes without NDEBUG, 0 with NDEBUG
return 0;
}
Javaコード:
public class Test {
public static void main(String[] args) {
assert(System.nanoTime()==0); // increases binary size by about 200 bytes
}
}
bn。の答えに応えて:
public class Test2 {
public static final boolean assertions = false;
public static void main(String[] args) {
if(assertions) {
assert(System.nanoTime()==0);
}
}
}
編集:実際、この有効化/無効化は、実行時よりもコンパイル時の機能の方が便利なようです。つまり、何人のエンドユーザーがそれらを有効にしますか?プログラマーがデバッグプロセス中に懸念している限り、とにかくコードを再コンパイルする可能性があります。