2012-05-04 5 views
6

Ho un'app che si è arrestata di recente e sono riuscito a ottenere il suo callstack utilizzando EurekaLog. Quello che ho notato è che è stata chiamata una finalizzazione dell'unità, ma l'app non si è chiusa e ha continuato a funzionare.Quando viene chiamato il metodo di finalizzazione nell'unità?

AFAIK, le sezioni di finalizzazione vengono chiamate solo quando l'app termina. Ma non era quello che mi è successo.

Qualcuno sa perché è stato chiamato un metodo di finalizzazione quando non doveva farlo?

EDIT

Questa applicazione non utilizza alcun DLL o bPLS.

EDIT2

E 'possibile che un thread quando finito potrebbe chiamare finalizzazione?

+0

commentare la linea, vedere se il problema persiste, se è così, allora il tuo problema è in un posto diverso, altrimenti, devi fornire maggiori informazioni riguardanti la funzione, di solito eureka è giusto ... – ComputerSaysNo

+0

sto cercando di riprodurre il problema per quasi 2 ore e non ho ottenuto nulla finora. –

+1

Se non riesci a riprodurlo, allora questa domanda è piuttosto inutile. 'finalizzazione' avviene al momento della chiusura. –

risposta

4

Le finalizzazioni sono denominate in due punti. Il più comune è quando l'applicazione termina. Ma possono anche essere chiamati quando viene scaricata una DLL (o BPL), che avviene automaticamente quando l'applicazione termina, ma può anche accadere nel mezzo del programma in esecuzione se il codice lo scarica esplicitamente.

È possibile che sia ciò che sta succedendo?

+0

Nops. Questa app non usa dll o bpls. –

+6

Quindi si è verificato un errore nel report EurekaLog stesso oppure il codice sta seguendo da qualche parte un puntatore a funzione corrotta e termina in una routine di finalizzazione. Perché non finisci mai lì in modo legittimo, a meno che il modulo dell'unità non sia stato scaricato. –