2010-07-25 21 views
5

Mam program, który działa poprawnie na urządzeniu w konfiguracji debugowania, ale nie działa jako wydanie. Ktoś ma to doświadczenie i jak mogę to naprawić?aplikacja działa jako debugowanie, ale ulega awarii jako wydanie

Thx

+0

Powinieneś zobaczyć moją odpowiedź na to pytanie i to (sorta) da ci odpowiedź na to, czego szukasz: http://stackoverflow.com/questions/3261557/why-is-windows-phone- Emulator 7-emulator-tak-powolny w porównaniu do emulatora-us/3261644 # 3261644 –

+0

Sprawdziłem, ale to nie pomoże. Obie wersje, o których wspomniałem, działają na urządzeniu, a nie na symulatorze. Wszystko jest idealne w symulatorze. –

+0

Dostaję się w tym momencie: Oba są różne i dlatego zawodzą. –

Odpowiedz

1

post

Niektóre

Ślady!

Co masz na myśli mówiąc "porażka"? Wypadek? Powiesić? Jettisoned do użycia pamięci? Jakie są objawy niepowodzenia? Masz ślad wstecz? Czy masz w kodzie coś, co zachowuje się inaczej w debugowaniu a wydaniu? Wszelkie shenanigans typu #ifdef DEBUG? asserts z efektami ubocznymi? Czy bałagan z ustawieniami kompilatora? Masz C++? Montaż?

Widzę wskazówkę w komentarzach; nielegalny dostęp do zmiennej. Najprawdopodobniej jest to spowodowane tym, że optymalizator ponownie użył gniazda stosu szybciej w wydaniu niż debugowanie. Ogólnie rzecz biorąc, sprowadza się to do problemu nadmiernego zwolnienia.

Nawet przy budowaniu w celu wydania, nadal można włączyć wykrywanie zombie.

Wykonałeś także kompilację i analizę i naprawiono wszelkie problemy, które on wskazuje?

15

wpadłem na ten sam problem - App działało dobrze na symulatorze i urządzenia w trybie debugowania, ale nie w trybie wydania (to zainstalować, ale po prostu wyświetla ekran powitalny)

  • Xcode 4.3.2
  • iOS Wdrożenie docelowa 4,3

Ciągle widząc odpowiedzi na StackOverflow stwierdzili, że była to kwestia zarządzania pamięcią, ale to nie miało żadnego sensu dla mnie, ponieważ wersja debug działa perfekcyjnie, gdy załadowany do mojego iPhone 4S. Sprawdziłem również Ustawienia kompilacji, aby zobaczyć, co różni się między tymi dwoma trybami, i pominąłem jedną różnicę, która miała znaczenie w końcowym - optymalizacji kompilatora.

W ustawieniach Build -> Kompilator LLVM pod Jabłko 3,1 generowania kodu -> Optymalizacja poziomu, zmień ustawienie z domyślnego Najszybciej, Najmniejszy [-Os] do Brak [-O0] Zwolnij. Naprawiono mój problem.

Znaleziono to rozwiązanie w tym poście na blogu: http://www.mindjuice.net/2011/11/30/how-to-fix-an-app-that-crashes-in-release-but-not-debug/.

Apple Documentation pomaga, ale nie wyjaśnia, dlaczego robi dokładnie odwrotnie naprawia rzeczy:

optymalizacje hasło dowolnego rodzaju w wyniku budowy razy wolniej ze względu na dodatkową pracę zaangażowanych w procesie optymalizacji. Jeśli Twój kod się zmienia, tak jak podczas cyklu programowania, nie chcesz włączać optymalizacji. Ponieważ zbliża się koniec cyklu rozwojowego, konfiguracja wersji wstępnej może wskazać rozmiar gotowego produktu, dlatego odpowiednia jest opcja Najszybsza i Najmniejsza.

Brak: Kompilator nie próbuje zoptymalizować kodu. Użyj tej opcji podczas programowania, gdy koncentrujesz się na rozwiązywaniu błędów logicznych i potrzebujesz szybkiego czasu kompilacji. Nie używaj tej opcji do wysyłki pliku wykonywalnego.

Najszybszy, najmniejszy: Kompilator wykonuje wszystkie optymalizacje, które zazwyczaj nie zwiększają rozmiaru kodu. Jest to preferowana opcja dla kodu wysyłki, ponieważ daje mniejszy ślad pamięci dla twojego pliku wykonywalnego.

+0

Dokumentacja, którą zacytowałeś, mówi: "Nie używaj tej opcji [Brak] do wysyłki pliku wykonywalnego". Ale czy to właśnie zrobiłeś? –

Powiązane problemy