Ho un po 'di codice in una classe in esecuzione in Java 1.7.0_17 e Jboss 4.2.3GA in Windows. Il codice fa questo:impossibile comportamento chiamata metodo Java
Date newNextDate = inBetween(currentDate, nextDate, start);
print("newNextDate=" + newNextDate);
il trascorre fa un confronto abbastanza semplice:
private Date inBetween(Date start, Date end, Date test) {
...
Date contains = t.contains(test) ? test : end;
print("returning contains=" + contains);
return contains;
}
l'attuazione esatta contiene non è pertinente IMHO, perché nei risultati finali in un java.util.Date essere stato assegnato alla variabile contiene. L'uscita su stdout è:
16:44:56,153 INFO returning contains=Tue Apr 30 23:59:59 CEST 2013
16:44:56,153 INFO newNextDate=null
E questo dove dove il mistero ha inizio: 1. appena prima l'istruzione return la contiene variabile ha un valore 2. dopo il ritorno della variabile raccolta è nullo
Come è possibile nel mondo?
- Sì, abbiamo controllato se è stato chiamato esattamente questo metodo intermedio, altrimenti non avrebbe stampato l'output.
- No, non esiste alcuna variabile di istanza con lo stesso nome. Ma anche se, non c'è niente in mezzo.
- No, non è possibile eseguire il debug del processo, perché si verifica solo sui nostri server di produzione e non è riproducibile in fase di sviluppo.
La cosa più strana è che si verifica solo qui, da nessun'altra parte nelle 1.000.000 righe di codice.
Nel codice in cui si trova la "stampa", stampare una traccia dello stack. 'Eccezione e = nuova NullPointerException(); System.printstacktrace (e); '(warning: pseudo-java) e assicurati che non ci sia stata un'iniezione di un proxy di qualche tipo attorno al metodo' inBetween() '. (Oscuro ma possibile). –
si può effettivamente collegare a jvm e eseguire il debug remoto del server di produzione. http://java.dzone.com/articles/how-debug-remote-java-applicat –
Utilizzare il debug e iterare passo dopo passo. Aggiungi punti di interruzione dove necessario e osserva i valori. Hai sicuramente un errore da qualche parte. – Quillion