2012-04-12 12 views
8

Ilekroć nastąpi awaria na mojej aplikacji, dzienniki awarii są wyświetlane w postaci symbolicznej wewnątrz organizera. Problem polega na tym, że wszystkie adresy pamięci wskazujące na klasy iOS otrzymują symboliczne drobne, ale adresy pamięci z moich klas aplikacji nie są symbolizowane. Którą właściwość projektu XCode muszę ustawić, aby je włączyć.Symbolizowanie dzienników awarii w XCode 4.3.2

To są bieżące ustawienia kompilacji, które umożliwiły oznaczenie klas iOS. Używam XCode 4.3.2.

Current build settings

+0

Nawiasem mówiąc, czy zdarzy się, że Xcode 3.x zainstalowany na tym samym komputerze? – lukasz

+0

@lukasz, dlaczego o to pytasz? – Till

+0

Z tego, co słyszałem, powodowało pewne problemy z symbolizowaniem. I moje problemy również zniknęły w tym samym czasie, kiedy w końcu pozbyłem się 3.x. To może być zbieg okoliczności. – lukasz

Odpowiedz

1

Czy wyłączyłeś reflektor? symbolicatecrash używa spotlight, aby znaleźć pliki binarne i dsym, więc jeśli wyłączyłeś reflektor, nie będzie on mógł ich znaleźć. W każdym razie, oto jak przekonwertować adres śledzenia stosu sześciokątnego na numer linii:

[1] Znajdź plik .dSym, przechodząc do XCode-> Organizator, klikając archiwa, następnie kliknij prawym przyciskiem myszy na archiwum i przejdź do pliku ten katalog (możesz po prostu przeciągnąć folder do okna powłoki).

[2] cd do katalogu dSYMs.

[3] uruchomić dwarfdump polecenie przetłumaczyć adres hex do numeru linii w kodzie:

dwarfdump --arch armv7 myApp.dSYM --lookup 0xaabbccdd | grep 'Line table' 
0

Spróbuj ustawić postprocessing Deployment NO.

DEPLOYMENT_POSTPROCESSING. Aktywacja tego ustawienia oznacza, że ​​pliki binarne powinny zostać usunięte, a tryb pliku, właściciel i grupa powinny zostać ustawione na wartości standardowe.

+0

Ustawienie DEPLOYMENT_POSTPROCESSING na NO nie rozwiązuje problemu. – Abhinav

1

Strip Debug Symbols During Copy: Powinien być YES od konfiguracji debugowania nie buduje, ponieważ będzie wysadzić swoją aplikację binarny 30-50%

Debug Information Format: Powinien być DWARF with dSYM File dla wszystkich konfiguracji, aby móc symbolicate swoje symbole z dowolny plik binarny.

Teraz domyślam się, że próbujesz tego na kompilacjach debugowania, na kompilacjach, które nie są najnowszymi wynikami polecenia budowania w Xcode. Trzeba pamiętać, że za każdym razem, gdy uruchamiasz polecenie build, generowany jest nowy plik wykonywalny i nowy pakiet dSYM, a poprzedni zostaje zastąpiony! (Z wyjątkiem sytuacji, w której korzystasz z funkcji Archiwizowanie)

Skrypt symbolikatyzacji analizuje identyfikator UUID z raportu awarii aplikacji i przeszukuje odpowiedni pakiet .app AND .app.dSYM za pomocą reflektora. Jeśli więc jakiś reflektor nie indeksuje ścieżki docelowej lub pliki binarne są zastępowane innym uruchomieniem kompilacji, nie będzie w stanie symbolizować symboli aplikacji.

+0

Jak dodać zestaw symboli do XCode, aby symbolizować odpowiednie dzienniki awarii? –

+0

Wartość dSYM dla tej kompilacji musi być dostępna i zindeksowana przez Spotlight. Następnie należy go znaleźć. Więc. na przykład poprzez archiwizowanie wersji beta i wydań w sklepach z aplikacjami powinno być dobrze. Wersje debugowania nie są archiwizowane, a każda nowa kompilacja nadpisze poprzedni dSYM. I to będzie inne, nawet jeśli nie zmieniłeś ani jednej linii kodu. – Kerni

0

Wygląda na to, że xcode używa ostatnio zarchiwizowanego pliku .dsym do oznaczenia logów (nawet w debugowaniu), więc spróbuj archiwizować swoją aplikację..

Po zarchiwizowaniu aplikacji Ponownie symbolizuj raporty o awariach.

To zadziałało dla mnie.

+0

To nie jest poprawne! Proces oznaczania używa Spotlight do przeszukania do dopasowania dSYM zgodnie z identyfikatorem UUID aplikacji, który wygenerował raport awarii. Każda kompilacja da nowy identyfikator UUID. Archiwizacja gwarantuje, że będziesz mieć poprawny dSYM dla tych kompilacji. Ale np. podczas tworzenia kompilacji debugowania każda nowa kompilacja zastąpi poprzednią, a symbolika awarii z wcześniejszych kompilacji nie będzie już możliwa. – Kerni

Powiązane problemy