2012-07-25 27 views
12

Dostaję czasami ten raport awarii:Jak zrozumieć i rozwiązać zgłoszenie awarii: SIGSEGV, SEGV_ACCERR

Name: SIGSEGV 
Reason: SEGV_ACCERR 
Stack Trace: 

0 MyApp 0x00070456 0x1000 + 455766 
1 MyApp 0x0007a34d 0x1000 + 496461 
2 MyApp 0x0007a4f1 0x1000 + 496881 
3 MyApp 0x000d31dd 0x1000 + 860637 
4 MyApp 0x00067f0f 0x1000 + 421647 
5 MyApp 0x0005ad69 0x1000 + 367977 
6 MyApp 0x000081e3 0x1000 + 29155 
7 MyApp 0x00008ae9 0x1000 + 31465 
8 CoreFoundation 0x35a547e4 __invoking___ + 68 
9 CoreFoundation 0x359af7b1 -[NSInvocation invoke] + 160 
10 Foundation 0x3556268f -[NSInvocationOperation main] + 114 
11 Foundation 0x354fb393 -[__NSOperationInternal start] + 862 
12 Foundation 0x35564793 __block_global_6 + 102 
13 libdispatch.dylib 0x348dec59 _dispatch_call_block_and_release + 12 
14 libdispatch.dylib 0x348e1817 _dispatch_worker_thread2 + 258 
15 libsystem_c.dylib 0x32e0edfb _pthread_wqthread + 294 

ja tego nie rozumiem zgłoszenie awarii. Również nie wiem, kiedy to się dzieje.

Czy istnieje sposób, aby dowiedzieć się więcej o tej awarii?

Jak mogę rozwiązać ten problem?

+0

Musisz symbolizować raport awarii, który przekształci adresy w linii od 0 do 7 w znaczące klasy, metody i numery linii. Zwykle Xcode robi to automatycznie, jeśli nadal masz binarną kompilację, która spowodowała awarię. Czy próbowałeś zaimportować raport do organizatora Xcode, aby go symbolizować? Jak otrzymałeś ten raport? – Kerni

+0

@Kerni otrzymuję raport o awarii od crittercism.com. używając SDK crittercism dla iOS. widzę, że aplikacja ulega awarii na niektórych urządzeniach i loguje się do mojego postu. mogę pobrać raport, ale jest to plik tekstowy. kiedy przeciągam i upuszczam to do xcode, otwiera plik tekstowy. co powinienem zrobić? – brush51

+0

@Kerni dziękuję za odpowiedź. Mam to symbolizowane i teraz mam punkt, w którym się zawiesza. proszę napisać to jako odpowiedź, więc mogę oznaczyć to jako odpowiedź. – brush51

Odpowiedz

6

trzeba do sy mbolicate raport awarii, który przekształci adresy w linii od 0 do 7 w znaczące klasy, metody i numery linii. Zwykle Xcode robi to automatycznie, jeśli nadal masz binarną kompilację, która spowodowała awarię.

2

Błąd SIGSEV to wyślij sygnał, gdy staramy się pamięć, że nie wolno dotykać

Najlepszym sposobem rozwiązania tego problemu jest wprowadzenie linii breakpoint i skakać na linię, aby wybrać linia, która jest problem

albo można również umieścić niektóre dzienniki debugowania do zobaczyć, było jest problem

aby zrozumieć, co SIGSEV lub SEGV_ACCERR znaczy, można wyszukać w internecie więcej informacji;)

+47

Moje wyszukiwanie w Internecie doprowadziło mnie tutaj :( – Saltymule

+3

Szukałem też SIGSEV i to mnie tu sprowadziło. Zamiast mówić nam, żebyśmy przeszukiwali internet, nie dajecie podsumowanie? –

+0

Ta odpowiedź może rzucić trochę światła http://stackoverflow.com/a/25877766/192924 – Vamos

1

Pytanie jest stare, ale jest lepszy sposób niż odpowiedź Johna Smitha.

Obecnie najlepsze podejście wykonuje się za pomocą profilera (w XCode: Product/Profile) przy użyciu odpowiedniego szablonu.
Najprawdopodobniej musisz użyć szablonu "Zombie", który jest teraz również obsługiwany na urządzeniu :) nie tylko na emulatorze. Podczas korzystania z tego narzędzia masz większe szanse na wykrycie niewłaściwego użycia pamięci.