Comment diagnostiquer une KERN_PROTECTION_FAILURE
Je suis un intéressant crash que je peux ne semblent jamais à reproduire sur le simulateur:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x3212e86c 0x3212c000 + 10348
1 StockTwits 0x00016b06 0x1000 + 88838
2 Foundation 0x30718422 0x306db000 + 250914
3 Foundation 0x307183a4 0x306db000 + 250788
4 CFNetwork 0x30933e74 0x30923000 + 69236
5 CFNetwork 0x30927b70 0x30923000 + 19312
6 CFNetwork 0x30927e62 0x30923000 + 20066
7 CFNetwork 0x30927a60 0x30923000 + 19040
8 CFNetwork 0x30927a12 0x30923000 + 18962
9 CFNetwork 0x30927990 0x30923000 + 18832
10 CFNetwork 0x3092790e 0x30923000 + 18702
11 CoreFoundation 0x30352a86 0x302e1000 + 465542
12 CoreFoundation 0x30354768 0x302e1000 + 472936
13 CoreFoundation 0x30355504 0x302e1000 + 476420
14 CoreFoundation 0x302fe8e4 0x302e1000 + 121060
15 CoreFoundation 0x302fe7ec 0x302e1000 + 120812
16 GraphicsServices 0x31a776e8 0x31a74000 + 14056
17 GraphicsServices 0x31a77794 0x31a74000 + 14228
18 UIKit 0x323272a0 0x32321000 + 25248
19 UIKit 0x32325e10 0x32321000 + 19984
20 StockTwits 0x00002fd4 0x1000 + 8148
21 StockTwits 0x00002fa4 0x1000 + 8100
J'ai NSZombies activé ainsi que la pile de l'exploitation forestière. Couru par le biais de l'analyseur statique assurez-vous que tous les objets sont conservés et publiés correctement, mais j'ai le sentiment qu'il est toujours lié à conserver/de relâchement.
Pensées?
N'êtes-vous pas de passer un int de valeur 8 (0x00000008) quelque part au lieu d'un pointeur?
Pouvez-vous expliquer un peu plus? Intéressant...
Voir cette question pour plus d'info: stackoverflow.com/questions/1282428/...
Pouvez-vous expliquer un peu plus? Intéressant...
Voir cette question pour plus d'info: stackoverflow.com/questions/1282428/...
OriginalL'auteur Sheehan Alam | 2010-08-05
Vous devez vous connecter pour publier un commentaire.
Vous devez être déréférencement d'un pointeur NULL, autres que cet incident ne se produise pas. L'Analyseur Statique est un bel outil pour obtenir des conseils sur les choses que vous faites mal. Cependant, il ne le trouvant pas une erreur ne signifie pas que votre programme est exempt de bogues. Tournant sur les zombies n'aide pas toujours. Parfois, il suffit d'une simple surveillance.
Le fait que le simulateur ne montrent pas ce problème ne se pose pas en dire trop. En fin de compte, c'est une autre machine avec un processeur différent et une architecture différente. Il ya des occasions où les faux code fonctionne bien sur une plate-forme mais se bloque sur l'autre.
Vous devez re-symbolicate vous trace de la pile et avoir un regard de près à cette fonction, c'est de s'écraser. Si vous souhaitez obtenir de l'aide, il est probablement préférable de poster le code ici.
Une astuce: ces questions sont souvent réparties sur plusieurs méthodes. L'analyseur ne voit qu'une méthode à la fois. Vous devriez jeter un oeil à ce qui s'est passé pour les objets de votre méthode AVANT de s'écraser, il a été conclu.
Le plus simple est de ne pas compiler avec les optimisations à tous. Faire une version de Débogage de configuration qui contient les symboles de débogage. Pour Symbolicating vous pourriez trouver la réponse ici: stackoverflow.com/questions/1460892/...
Pour les futurs lecteurs, déréférencement d'un pointeur NULL est PAS la seule raison de cet incident se produit, comme il est indiqué dans Apple document
The process attempted to access invalid memory, or it attempted to access memory in a manner not allowed by the memory's protection level (e.g, writing to read-only memory).
Aussi, ce post montre ce type d'exception en raison d'un débordement de la pile.OriginalL'auteur Max Seelemann