web-dev-qa-db-fra.com

crash ios EXC_BAD_ACCESS KERN_INVALID_ADDRESS

MyApp fonctionne bien dans 98% des cas, mais parfois, il y a un crash. Et c'est tellement aléatoire.

Le rapport d'incident montre ce qui suit.

Thread : Crashed: com.Apple.main-thread
0  libobjc.A.dylib                0x3b1ae626 objc_msgSend + 5
1  Foundation                     0x310e2381 _netServiceMonitorCallBack + 104
2  CFNetwork                      0x302ea3b5 _QueryRecordReply(_DNSServiceRef_t*, unsigned int, unsigned int, int, char const*, unsigned short, unsigned short, unsigned short, void const*, unsigned int, void*) + 324
3  libsystem_dnssd.dylib          0x3b7289d9 handle_query_response + 168
4  libsystem_dnssd.dylib          0x3b72773f DNSServiceProcessResult + 582
5  CFNetwork                      0x302ea3e5 _SocketCallBack_Mon(__CFSocket*, unsigned long, __CFData const*, void const*, void*) + 20
6  CoreFoundation                 0x30691189 __CFSocketPerformV0 + 580
7  CoreFoundation                 0x3068efaf __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
8  CoreFoundation                 0x3068e477 __CFRunLoopDoSources0 + 206
9  CoreFoundation                 0x3068cc67 __CFRunLoopRun + 630
10 CoreFoundation                 0x305f7729 CFRunLoopRunSpecific + 524
11 CoreFoundation                 0x305f750b CFRunLoopRunInMode + 106
12 GraphicsServices               0x355336d3 GSEventRunModal + 138
13 UIKit                          0x32f58871 UIApplicationMain + 1136
14 MyApp                          0x0013f813 main (main.m:16)

Toutes ces méthodes sont internes. Je rencontre ces accidents sur iPad 4 sous iOS 7.1.2. Comment puis-je le clouer. Toutes les aides appréciées.

46
Sj.

Ce crash est dû à un pointeur qui pend. Lorsqu'une variable ou un objet tente d'accéder à un objet déjà désalloué, ce blocage se produit.

31
Indrajeet

C'est une vieille question, mais le crash de EXC_BAD_ACCESS KERN_INVALID_ADDRESS n'est pas dû à une fuite de mémoire, mais à une tentative d'accès à un objet désalloué. Etant donné que la mémoire de l'objet désalloué est peut-être maintenant occupée par un autre objet de type différent, la dernière ligne de la pile d'accidents peut être erronée car elle ne fait pas vraiment partie de votre chemin d'exécution programmé. Nous avons donc généralement besoin de rechercher la trace. un petit peu. Cependant, la trace de pile publiée par @Sj consiste essentiellement en des appels système, donc c'est très difficile. Si cela est généré dans une session de débogage, l'ajout d'un point d'arrêt "Toutes les exceptions" peut aider à générer une trace de pile plus informative.

40
CodeBrew