2013-12-18 2 views
5

Я получаю ошибки iOS EXC_BAD_ACCESS при использовании SocketRocket, и мне интересно, что я могу сделать для дальнейшей отладки проблемы, чтобы определить, есть ли проблема на моей стороне или на стороне SocketRocket.Как отлаживать iOS EXC_BAD_ACCESS KERN_INVALID_ADDRESS на iOS

StackTrace я получаю:

Crashed: com.apple.main-thread 
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x2000000c 
raw 
0 libobjc.A.dylib  objc_msgSend + 5 
1 OMlearnings   SRWebSocket.m line 692 __30-[SRWebSocket _failWithError:]_block_invoke_2 
2 libdispatch.dylib _dispatch_call_block_and_release + 10 
10 UIKit    UIApplicationMain + 1136 
11 OMlearnings   main.m line 16 main 

или иногда

Crashed: NSOperationQueue Serial Queue 
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0xc 
raw 
0 libobjc.A.dylib  objc_msgSend + 5 
1 OMlearnings   SRWebSocket.m line 613 -[SRWebSocket scheduleInRunLoop:forMode:] 
2 OMlearnings   SRWebSocket.m line 600 -[SRWebSocket _connect] 
3 OMlearnings   OMSRealTimeTeamDashboard.m line 157 -[OMSRealTimeTeamDashboard sendMessage:] 
4 OMlearnings   OMSRealTimeTeamDashboard.m line 171 -[OMSRealTimeTeamDashboard eventReceived:] 
5 CoreFoundation  __invoking___ + 68 
6 CoreFoundation  -[NSInvocation invoke] + 282 
7 Foundation   -[NSInvocationOperation main] + 112 
8 Foundation   -[__NSOperationInternal _start:] + 770 
14 libsystem_pthread.dylib _pthread_wqthread + 298 

Мой кодовая довольно проста и в основном подписывается на события и выполняет socketrocket SendMessage в очереди (чтобы иметь дело с параллелизмом)

[signalServices subscribe:my-event toBlock:^(NSNotification * notification) { 
    [this.queue addOperation:[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(eventReceived:) object:notification]]; 
}]; 

- (void)eventReceived: (NSNotification *)notification { 
    // ... 
    [socket send:[NSString stringWithFormat:@"%i,1,%@", currentUserId.intValue, [NSNumber numberWithInt: rate.value]]]; 
} 

Я читал людей, использующих NSZombies для отладки проблемы, но m y проблема возникает редко, поэтому, скорее всего, у меня не хватит памяти, прежде чем проблема станет видимой. Он отлично работает в 99% случаев.

Есть ли что-нибудь знать о iOS, которые могут случайно разбивать приложения, использующие сокеты и т. Д.? Например, у нас включена функция фоновой выборки, может ли это быть причиной некоторых случайных сбоев?

Спасибо!

+0

Вы решили это? – Spail

+0

Любое обновление на этом? – franck

ответ

4

В StackTrace,

0 libobjc.A.dylib  objc_msgSend + 5 
1 OMlearnings   SRWebSocket.m line 692 __30-[SRWebSocket _failWithError:]_block_invoke_2 

EXC_BAD_ACCESS произошло в этой линии, https://github.com/square/SocketRocket/blob/master/SocketRocket/SRWebSocket.m#L692

[self.delegate webSocket:self didFailWithError:error]; 

Согласно документу, https://github.com/square/SocketRocket

SRWebSocket 
(unlike NSURLConnection, SRWebSocket won't retain the delegate) 

@property (nonatomic, assign) id <SRWebSocketDelegate> delegate; 

свойство делегат не был сохранен SRWebSocket, таким образом, если вы не сохраните e делегировать объект, он сработает с висящим указателем. Как у вас есть сильная ссылка на объект делегата?

+1

объект, который я передаю в качестве делегата, создается с помощью метода injective_register_singleton, поэтому действительно маловероятно, что ссылка исчезает –

+1

. Почему бы вам не вставить код в свой вопрос? –

Смежные вопросы