3

毎日約 3000 人のユーザーがいる iPad アプリ「MyApp」の現場から、再現不可能なクラッシュ レポートが複数届きます。理由: 「認識できないセレクターがインスタンスに送信されました」 影響を受けるデバイス: iPad 1 のみ。

クラッシュ レポートは、UIButton のアクションである[__NSCFDictionary buttonPressed:]while を参照します。buttonPressed:どうやらクラッシュの場合、ボタンはまだメッセージを受信する準備ができていません。代わりに、メッセージはメモリ内の他のインスタンス (ほとんどの場合、辞書) にディスパッチされます。

アクションbuttonPressed:は、xib ファイルを介してボタンにアタッチされます (アクションがプログラムでイメージ ビューにアタッチされる場合が 1 つ追加されます)。buttonPressed:アプリが前面に表示されたときに、ユーザーが最初にトリガーする可能性が高いアクションです。これらの場合、アプリが完全に初期化されておらず (前面に戻され)、再開できないと思われます。

私の疑いは、シンボル (常にこれらのクラッシュに関連して発生する) に基づいています: _resourceLoadLoop(メインスレッドで実行されますか?) および_dispatch_mgr_wakeup.

あなたの意見は何ですか?iPad 1 のお客様と似たような経験はありましたか? 既知のバグはありますか?

典型的なクラッシュ スタックの内容は次のとおりです。

Hardware Model:      iPad1,1
Code Type:       ARM
Parent Process:  launchd [1]

Date/Time:       2012-12-04 06:35:48 +0000
OS Version:      iPhone OS 5.1.1 (9B206)
Report Version:  104

Exception Type:  SIGABRT
Exception Codes: #0 at 0x35a2f32c
Crashed Thread:  0

Application Specific Information:
*** Terminating app due to uncaught exception \'NSInvalidArgumentException\', reason: \'-[__NSCFDictionary buttonPressed:]: unrecognized selector sent to instance 0x40eaa0\'

Last Exception Backtrace:
0   CoreFoundation                      0x359b988f __exceptionPreprocess + 163
1   libobjc.A.dylib                     0x335dd259 objc_exception_throw + 33
2   CoreFoundation                      0x359bca9b -[NSObject doesNotRecognizeSelector:] + 175
3   CoreFoundation                      0x359bb915 ___forwarding___ + 301
4   CoreFoundation                      0x35916650 _CF_forwarding_prep_0 + 48
5   CoreFoundation                      0x359133fd -[NSObject performSelector:withObject:withObject:] + 53
6   UIKit                               0x330d4e07 -[UIApplication sendAction:to:from:forEvent:] + 63
7   UIKit                               0x330d4dc3 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 31
8   UIKit                               0x330d4da1 -[UIControl sendAction:to:forEvent:] + 45
9   UIKit                               0x330d4b11 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 493
10  UIKit                               0x330d5449 -[UIControl touchesEnded:withEvent:] + 477
11  UIKit                               0x330d392b -[UIWindow _sendTouchesForEvent:] + 319
12  UIKit                               0x330d3319 -[UIWindow sendEvent:] + 381
13  UIKit                               0x330b9695 -[UIApplication sendEvent:] + 357
14  UIKit                               0x330b8f3b _UIApplicationHandleEvent + 5827
15  GraphicsServices                    0x336ab22b PurpleEventCallback + 883
16  CoreFoundation                      0x3598d523 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 39
17  CoreFoundation                      0x3598d4c5 __CFRunLoopDoSource1 + 141
18  CoreFoundation                      0x3598c313 __CFRunLoopRun + 1371
19  CoreFoundation                      0x3590f4a5 CFRunLoopRunSpecific + 301
20  CoreFoundation                      0x3590f36d CFRunLoopRunInMode + 105
21  GraphicsServices                    0x336aa439 GSEventRunModal + 137
22  UIKit                               0x330e7cd5 UIApplicationMain + 1081
23  MyApp                               0x0002411b main (main.m:14)
24  MyApp                               0x000240c0 start + 40


Thread 0 Crashed:
0   libsystem_kernel.dylib              0x35a2f32c __pthread_kill + 8
1   libsystem_c.dylib                   0x34c1029f abort + 95
2   MyApp                               0x0012d595 +[PLCrashReporter sharedReporter] + 1
3   CoreFoundation                      0x359b9957 __handleUncaughtException + 75
4   libobjc.A.dylib                     0x335dd345 _objc_terminate + 129
5   libc++abi.dylib                     0x352253c5 safe_handler_caller(void (*)()) + 77
6   libc++abi.dylib                     0x35225451 operator delete(void*) + 1
7   libc++abi.dylib                     0x35226825 __cxa_current_exception_type + 1
8   libobjc.A.dylib                     0x335dd2a9 objc_exception_rethrow + 13
9   CoreFoundation                      0x3590f50d CFRunLoopRunSpecific + 405
10  CoreFoundation                      0x3590f36d CFRunLoopRunInMode + 105
11  GraphicsServices                    0x336aa439 GSEventRunModal + 137
12  UIKit                               0x330e7cd5 UIApplicationMain + 1081
13  MyApp                               0x0002411b main (main.m:14)

Thread 1:
0   libsystem_kernel.dylib              0x35a1f3a8 kevent + 24
1   libdispatch.dylib                   0x33d52bc9 _dispatch_mgr_wakeup + 1

Thread 2:
0   libsystem_kernel.dylib              0x35a1f004 mach_msg_trap + 20
1   CoreFoundation                      0x3598d3f3 __CFRunLoopServiceMachPort + 127
2   CoreFoundation                      0x3598c12b __CFRunLoopRun + 883
3   CoreFoundation                      0x3590f4a5 CFRunLoopRunSpecific + 301
4   CoreFoundation                      0x3590f36d CFRunLoopRunInMode + 105
5   WebCore                             0x37655ca3 RunWebThread(void*) + 403
6   libsystem_c.dylib                   0x34bd8735 _pthread_start + 321

Thread 3:
0   libsystem_kernel.dylib              0x35a1f004 mach_msg_trap + 20
1   CoreFoundation                      0x3598d3f3 __CFRunLoopServiceMachPort + 127
2   CoreFoundation                      0x3598c12b __CFRunLoopRun + 883
3   CoreFoundation                      0x3590f4a5 CFRunLoopRunSpecific + 301
4   CoreFoundation                      0x3590f36d CFRunLoopRunInMode + 105
5   Foundation                          0x34d54bb9 +[NSURLConnection(Loader) _resourceLoadLoop:] + 309
6   Foundation                          0x34d54a81 -[NSThread main] + 73
7   Foundation                          0x34de8591 __NSThread__main__ + 1049
8   libsystem_c.dylib                   0x34bd8735 _pthread_start + 321

Thread 4:
0   libsystem_kernel.dylib              0x35a2f570 __select + 20
1   libsystem_c.dylib                   0x34bd8735 _pthread_start + 321

Thread 5:
0   libsystem_kernel.dylib              0x35a2fcd4 __workq_kernreturn + 8

Thread 6:
0   libsystem_kernel.dylib              0x35a2fcd4 __workq_kernreturn + 8

Thread 0 crashed with ARM Thread State:
    r0: 0x00000000     r1: 0x00000000     r2: 0x00000001     r3: 0x00000000 
    r4: 0x00000006     r5: 0x3f2dbd98     r6: 0x00000002     r7: 0x2fe20a38 
    r8: 0x00469e00     r9: 0x00000000    r10: 0x00000000    r11: 0x0040eaa0 
    ip: 0x00000148     sp: 0x2fe20a2c     lr: 0x34c1720f     pc: 0x35a2f32c 
  cpsr: 0x00080010 

Binary Images:
   0x22000 -   0x288fff +MyApp armv7  <1f677ffc81aa3ccf958c65a92cce8418> /var/mobile/Applications/1D49C89A-36EA-43FC-BE76-7B770E36491B/MyApp.app/MyApp
0x3049d000 - 0x30550fff  iTunesStore armv7  <b3c0cce5f8e632e18f841c32b68f57a1> /System/Library/PrivateFrameworks/iTunesStore.framework/iTunesStore
0x30555000 - 0x305d8fff  MapKit armv7  <e39706ac199134a497954e1f1d6d7245> /System/Library/Frameworks/MapKit.framework/MapKit
0x305d9000 - 0x305dffff  liblaunch.dylib armv7  <aa2bcba6fc7a36a191958fef2e995475> /usr/lib/system/liblaunch.dylib
0x306dd000 - 0x306f1fff  PersistentConnection armv7  <54091a638f8731cd85ccf00fa06972c3> /System/Library/PrivateFrameworks/PersistentConnection.framework/PersistentConnection
0x30745000 - 0x30824fff  RawCamera armv7  <293f818ba6533dceae8b900b6ed3c887> /System/Library/CoreServices/RawCamera.bundle/RawCamera
0x30825000 - 0x30882fff  StoreServices armv7  <6ce256d3cf433e4aa1af8d696bf1f75d> /System/Library/PrivateFrameworks/StoreServices.framework/StoreServices
0x30883000 - 0x308cffff  CoreTelephony armv7  <b8f80d5d594c31d2b5d8fba9fdedb7e1> /System/Library/Frameworks/CoreTelephony.framework/CoreTelephony
0x308f1000 - 0x30929fff  VideoToolbox armv7  <9f25f38d1cd13a1daff99cfde8884410> /System/Library/PrivateFrameworks/VideoToolbox.framework/VideoToolbox
0x3092a000 - 0x30956fff  libtidy.A.dylib armv7  <3aacc5b650e037c086a8ff6657d154bf> /usr/lib/libtidy.A.dylib
0x30ef1000 - 0x30f42fff  CoreText armv7  <5bfac4ee88d03d5b87a1f105abb7756c> /System/Library/Frameworks/CoreText.framework/CoreText
0x30f43000 - 0x30f47fff  CertUI armv7  <f503892ef60e36108d28d8f9d6144d2a> /System/Library/PrivateFrameworks/CertUI.framework/CertUI
0x30fb3000 - 0x30fb3fff  liblangid.dylib armv7  <644ff4bcfbf337b5b5859e3f0fc0a9a8> /usr/lib/liblangid.dylib
0x30fb4000 - 0x30fcafff  EAP8021X armv7  <952fcfdec0633aff923768fca1a26fcb> /System/Library/PrivateFrameworks/EAP8021X.framework/EAP8021X
0x30fcb000 - 0x30fe0fff  libresolv.9.dylib armv7  <66f7557fa4b43979b186e00271839fdb> /usr/lib/libresolv.9.dylib
0x3129d000 - 0x312bafff  libsystem_info.dylib armv7  <50863bcbf478323e96a8e5b1a83ea6f9> /usr/lib/system/libsystem_info.dylib
0x312c0000 - 0x31433fff  MediaPlayer armv7  <63cdf8f9c66d36e7a4e69e2f6cae854f> /System/Library/Frameworks/MediaPlayer.framework/MediaPlayer
0x315ea000 - 0x315eafff  vecLib armv7  <a2cfe25e77aa36bfb4a30b2d0d2dd465> 
[...]
4

2 に答える 2

0

メッセージがまったく正しくないオブジェクトに送信される「認識されないセレクター」例外は、通常、二重解放エラーが原因です。これは、View Controller (またはbuttonPressed:メソッドを持つもの) の割り当てが解除され、そのメモリが別のオブジェクト (この場合は辞書) によって再利用されたことを意味します。

メモリ管理コードを確認する必要があります。まだお持ちでない場合は、ARC に変換することを強くお勧めします。これは iOS 4 との下位互換性があり (弱参照を使用しない場合)、通常はこの種の問題を解決します。

これをデバッグするために、スキームの診断設定を編集してゾンビ検出を有効にすることができます。Instruments で「ゾンビ」インストゥルメントを使用することもできます。これらの手法はどちらも、二重リリースの問題があるかどうかを確認するのに役立ちます。

于 2012-12-05T12:26:52.797 に答える
0

すぐにアクティブ化されるのではなく、実装しbuttonPressed:ているコントローラーが解放され、そのメモリが別のオブジェクトに再利用された可能性があります。特定のデバイスに限定されている場合は、メモリの警告が原因である可能性があります...および iOS 6 から削除されたビューのアンロードが原因である可能性があります。

于 2012-12-05T12:24:32.610 に答える