2010-07-25 11 views
5

Ho un programma che funziona correttamente sul dispositivo in configurazione di debug, ma non funziona come versione. Qualcuno ha questa esperienza e come la aggiusto?viene eseguita come debug, ma si blocca come versione

Thx

+0

Si dovrebbe vedere la mia risposta a questa domanda e sarà (sorta) dare la risposta a ciò che stai cercando: http://stackoverflow.com/questions/3261557/why-is-windows-phone- 7-emulatore-così-lento-rispetto-a-um-iphone-emulatore-emulatore/3261644 # 3261644 –

+0

L'ho guardato, ma non è di aiuto. Entrambe le versioni che menziono sono in esecuzione sul dispositivo, non nel simulatore. Tutto è perfetto nel simulatore. –

+0

Sto arrivando a questo punto: sono entrambi diversi ed è per questo che sta fallendo. –

risposta

1

Messaggio

Alcuni

indizi!

Cosa intendi per "fail"? Crash? Appendere? Scartato per uso della memoria? Quali sono i sintomi del fallimento? Hai ottenuto il backtrace? Avete qualcosa nel vostro codice che si comporta in modo diverso nel debug rispetto al rilascio? Qualsiasi tipo di shenanigans di tipo #ifdef DEBUG? asserts con effetti collaterali? Hai sbagliato con le impostazioni del compilatore? Hai C++? Assemblea?

vedo un accenno di un indizio nei commenti; accesso illegale di una variabile. Molto probabilmente, questo è causato dall'ottimizzatore che riutilizza uno slot di stack più rapidamente in uscita rispetto al debug. Il che, in genere, si riduce a un problema di rilascio eccessivo.

Anche quando si sta creando il rilascio, è ancora possibile attivare il rilevamento di zombi.

Inoltre, hai già creato uno e analizzato e risolto eventuali problemi?

15

Ho incontrato lo stesso problema - App ha funzionato bene sul simulatore e dispositivo in modalità di debug, ma non in modalità di rilascio (sarebbe installare, ma solo visualizzare lo splashscreen)

  • Xcode 4.3.2
  • iOS distribuzione di destinazione 4,3

mi continuava a vedere le risposte su StackOverflow che dicono che questo è un problema di gestione della memoria, ma che non ha alcun senso per me dal momento che la versione di debug ha funzionato perfettamente bene quando caricato al mio iPhone 4S. Ho anche controllato Build Settings per vedere cosa differiva tra le due modalità e ho saltato l'unica differenza che contava alla fine: l'ottimizzazione del compilatore.

In Creare Impostazioni -> sotto di Apple LLVM compilatore 3.1 generazione di codice - Livello> Ottimizzazione, modificare l'impostazione dal default più veloce, più piccolo [-Os] a Nessuno [-O0] uscita. Risolto il problema

Trovato questa soluzione in questo post del blog: http://www.mindjuice.net/2011/11/30/how-to-fix-an-app-that-crashes-in-release-but-not-debug/.

Il Apple Documentation aiuta, ma non spiega perché fare solo le correzioni opposte cose:

ottimizzazioni del codice di qualsiasi risultato genere più lento a costruire volte a causa del lavoro extra coinvolti nel processo di ottimizzazione. Se il tuo codice sta cambiando, come accade durante il ciclo di sviluppo, non vuoi che le ottimizzazioni siano abilitate. Quando ti avvicini alla fine del tuo ciclo di sviluppo, tuttavia, la configurazione della build di rilascio può darti un'indicazione della dimensione del tuo prodotto finito, quindi l'opzione Più veloce, Più piccola è appropriata.

Nessuno: Il compilatore non tenta di ottimizzare il codice. Usa questa opzione durante lo sviluppo quando ti concentri sulla risoluzione di errori logici e hai bisogno di un tempo di compilazione veloce. Non usare questa opzione per spedire il tuo eseguibile.

Il più veloce, il più piccolo: Il compilatore esegue tutte le ottimizzazioni che in genere non aumentano le dimensioni del codice. Questa è l'opzione preferita per il codice di spedizione in quanto fornisce al tuo eseguibile un ingombro di memoria inferiore.

+0

La documentazione che hai citato dice "Non usare questa opzione [Nessuna] per spedire il tuo eseguibile". Ma è quello che hai fatto? –

Problemi correlati