So che le asserzioni possono essere abilitate/disabilitate in fase di esecuzione per il debug e la produzione, rispettivamente. Tuttavia ho trovato che le asserzioni aumentano anche la dimensione del file binario generato (circa 100-200 byte nell'esempio sotto).Compilazione senza asserzioni
In C e C++, possiamo farlo in fase di compilazione con #define NDEBUG
prima dello #include <assert.h>
.
Esiste un modo per il compilatore Java di eseguire automaticamente questa operazione? Mi piacerebbe lasciarli nel codice sorgente per scopi di debug in seguito. Ma non voglio nemmeno che il binario risultante sia più grande del necessario (abbiamo un limite di dimensione come requisito di progettazione).
codice C:
//#define NDEBUG
#include <assert.h>
int main(void) {
assert(0); // +200 bytes without NDEBUG, 0 with NDEBUG
return 0;
}
codice Java:.
public class Test {
public static void main(String[] args) {
assert(System.nanoTime()==0); // increases binary size by about 200 bytes
}
}
In risposta alla bn di risposta:
public class Test2 {
public static final boolean assertions = false;
public static void main(String[] args) {
if(assertions) {
assert(System.nanoTime()==0);
}
}
}
EDIT: In realtà, sembra per me che questa abilitazione/disabilitazione è una compilazione più utile funzione rispetto al tempo di esecuzione. Voglio dire, quanti utenti finali li abiliteranno? Per quanto riguarda un programmatore durante il processo di debug, sarà probabilmente lui a ricompilare il codice comunque.
Ciò non dimostra che ogni affermazione costa 200 byte, solo quella. – EJP
@EJP: di sicuro.Quello che intendevo era che c'è un aumento non trascurabile causato da affermazioni nel loro complesso. L'importo preciso dipende certamente dalla complessità della dichiarazione. – tskuzzy
Se ti preoccupi di queste cose, hai una lingua sbagliata. – lvella