SocketRocketを使用しているときにiOS EXC_BAD_ACCESSエラーが発生しました。問題が私の側にあるのか、SocketRocket側にあるのかを判断するために、iOS上でiOS EXC_BAD_ACCESS KERN_INVALID_ADDRESSをデバッグする方法
私が手にスタックトレースは次のとおりです。
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を使用している人を読んだことがありますが、 yの問題はほとんど起こりません。問題が発生する前にメモリが不足する可能性があります。 99%の時間で正常に動作します。
ソケットなどを使用するアプリをランダムにクラッシュさせるiOSについて知っておくべきことはありますか?たとえば、バックグラウンドフェッチを有効にしていると、ランダムクラッシュの原因になる可能性がありますか?
ありがとうございます!スタックトレースで
これを解決しましたか? – Spail
そのアップデートはありますか? – franck