現在のプロジェクトでは、メモリのオーバーシュートが原因でランダムにクラッシュしている可能性がありますが、実際にはどのクラスがそのクラッシュにつながるのかを知りたいので、シンボル化メソッドを使用してクラッシュの理由を見つけました。これが私がしたことです:
まず、XCodeビルドの設定は次のようになります。
コピー中のデバッグシンボルの削除:いいえ展開後処理:はいリンクされた製品の削除:はいデバッグシンボルの生成:はいデバッグ情報形式:dSYMファイルを使用したDWARF個別のストリップを使用:はい
XCodeの4.3.2バージョンでiOS5.1を使用しています。「symbolicatecrash」と「atos」の方法を使用してクラッシュの理由を明らかにしましたが、クラッシュの理由を見つけることができませんでした。
だから私はこれを試しました。配列から範囲外のインデックスにアクセスして、アプリケーションを自分でクラッシュさせました。これを使用して、シンボル化されたクラッシュ結果の出力を実際のクラッシュで検証しました。
クラッシュレポートの出力は次のとおりです。
Incident Identifier: 93678EE5-ED10-4502-A59B-5C7526640C4D
CrashReporter Key: 5a79e41767bd1988a9b4080ee5641f63ed42feb8
Hardware Model: iPad2,1
Process: MyAppName [887]
Path: /var/mobile/Applications/EF2C944B-4C26-4EB6-B41E-F89CF2232ADB/JAYPORE.app/MyAppName
Identifier: MyAppName
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2012-07-13 13:37:18.642 +0530
OS Version: iPhone OS 5.0.1 (9A405)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x3028432c __pthread_kill + 8
1 libsystem_c.dylib 0x37725f54 pthread_kill + 48
2 libsystem_c.dylib 0x3771efe4 abort + 88
3 MyAppName 0x00104aa0 0x5e000 + 682656
4 Foundation 0x34ebc1b0 -[NSObject(NSThreadPerformAdditions) performSelector:onThread:withObject:waitUntilDone:modes:] + 260
5 Foundation 0x34ebbe42 -[NSObject(NSThreadPerformAdditions) performSelectorOnMainThread:withObject:waitUntilDone:] + 130
6 MyAppName 0x00104924 0x5e000 + 682276
7 MyAppName 0x00118634 0x5e000 + 763444
8 MyAppName 0x00116b36 0x5e000 + 756534
9 libsystem_c.dylib 0x37730532 _sigtramp + 42
10 libsystem_c.dylib 0x37725f54 pthread_kill + 48
11 libsystem_c.dylib 0x3771efe4 abort + 88
12 MyAppName 0x00118658 0x5e000 + 763480
13 CoreFoundation 0x37c23980 __handleUncaughtException + 68
14 libobjc.A.dylib 0x3776f2ca _objc_terminate + 122
15 libc++abi.dylib 0x3017e3be _ZL19safe_handler_callerPFvvE + 70
16 libc++abi.dylib 0x3017e44a std::terminate() + 14
17 libc++abi.dylib 0x3017f81e __cxa_rethrow + 82
18 libobjc.A.dylib 0x3776f22e objc_exception_rethrow + 6
19 CoreFoundation 0x37b7953e CFRunLoopRunSpecific + 398
20 CoreFoundation 0x37b7939e CFRunLoopRunInMode + 98
21 GraphicsServices 0x37950fc6 GSEventRunModal + 150
22 UIKit 0x316f973c UIApplicationMain + 1084
23 MyAppName 0x0005ffc8 0x5e000 + 8136
24 MyAppName 0x0005ff6c 0x5e000 + 8044
Thread 1 name: Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0 libsystem_kernel.dylib 0x302743b4 kevent + 24
1 libdispatch.dylib 0x307dff74 _dispatch_mgr_invoke + 708
2 libdispatch.dylib 0x307dfc92 _dispatch_mgr_thread + 30
Thread 2 name: WebThread
Thread 2:
0 libsystem_kernel.dylib 0x30274010 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x30274206 mach_msg + 50
2 CoreFoundation 0x37bf741c __CFRunLoopServiceMachPort + 120
3 CoreFoundation 0x37bf6154 __CFRunLoopRun + 876
4 CoreFoundation 0x37b794d6 CFRunLoopRunSpecific + 294
5 CoreFoundation 0x37b7939e CFRunLoopRunInMode + 98
6 WebCore 0x32650128 _ZL12RunWebThreadPv + 396
7 libsystem_c.dylib 0x376e7c16 _pthread_start + 314
8 libsystem_c.dylib 0x376e7ad0 thread_start + 0
Thread 3 name: com.apple.NSURLConnectionLoader
Thread 3:
0 libsystem_kernel.dylib 0x30274010 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x30274206 mach_msg + 50
2 CoreFoundation 0x37bf741c __CFRunLoopServiceMachPort + 120
3 CoreFoundation 0x37bf6154 __CFRunLoopRun + 876
4 CoreFoundation 0x37b794d6 CFRunLoopRunSpecific + 294
5 CoreFoundation 0x37b7939e CFRunLoopRunInMode + 98
6 Foundation 0x34ec8bc2 +[NSURLConnection(Loader) _resourceLoadLoop:] + 302
7 Foundation 0x34ec8a8a -[NSThread main] + 66
8 Foundation 0x34f5c59a __NSThread__main__ + 1042
9 libsystem_c.dylib 0x376e7c16 _pthread_start + 314
10 libsystem_c.dylib 0x376e7ad0 thread_start + 0
Thread 4 name: com.apple.CFSocket.private
Thread 4:
0 libsystem_kernel.dylib 0x30284570 __select + 20
1 CoreFoundation 0x37bfb66a __CFSocketManager + 726
2 libsystem_c.dylib 0x376e7c16 _pthread_start + 314
3 libsystem_c.dylib 0x376e7ad0 thread_start + 0
Thread 5 name: Dispatch queue: com.apple.CFURLCACHE_work_queue
Thread 5:
0 libsystem_kernel.dylib 0x30275ac4 fsync + 8
1 libsqlite3.dylib 0x30741656 0x30704000 + 251478
2 libsqlite3.dylib 0x30746434 0x30704000 + 271412
3 libsqlite3.dylib 0x30741394 0x30704000 + 250772
4 libsqlite3.dylib 0x30737350 0x30704000 + 209744
5 libsqlite3.dylib 0x30719a6c 0x30704000 + 88684
6 libsqlite3.dylib 0x3072ccb4 0x30704000 + 167092
7 libsqlite3.dylib 0x3072b6ce sqlite3_step + 2098
8 libsqlite3.dylib 0x3070a732 sqlite3_exec + 366
9 CFNetwork 0x33a3cedc __CFURLCache::ExecSQLStatement_NoLock(sqlite3*, char const*, int (*)(void*, int, char**, char**), void*, long) + 32
10 CFNetwork 0x33a3fc7c _ZL24_CFURLCacheTimerCallbackPv + 320
11 libdispatch.dylib 0x307e133e _dispatch_source_invoke + 510
12 libdispatch.dylib 0x307dec60 _dispatch_queue_invoke$VARIANT$mp + 44
13 libdispatch.dylib 0x307ded9e _dispatch_queue_drain + 198
14 libdispatch.dylib 0x307dec56 _dispatch_queue_invoke$VARIANT$mp + 34
15 libdispatch.dylib 0x307df860 _dispatch_worker_thread2 + 204
16 libsystem_c.dylib 0x376e21c8 _pthread_wqthread + 288
17 libsystem_c.dylib 0x376e209c start_wqthread + 0
Thread 6:
0 libsystem_kernel.dylib 0x30284cd4 __workq_kernreturn + 8
1 libsystem_c.dylib 0x376e230a _pthread_wqthread + 610
2 libsystem_c.dylib 0x376e209c start_wqthread + 0
Thread 7:
0 libsystem_kernel.dylib 0x30284cd4 __workq_kernreturn + 8
1 libsystem_c.dylib 0x376e230a _pthread_wqthread + 610
2 libsystem_c.dylib 0x376e209c start_wqthread + 0
Thread 8:
0 libsystem_kernel.dylib 0x30274010 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x30274206 mach_msg + 50
2 CoreFoundation 0x37bf741c __CFRunLoopServiceMachPort + 120
3 CoreFoundation 0x37bf6154 __CFRunLoopRun + 876
4 CoreFoundation 0x37b794d6 CFRunLoopRunSpecific + 294
5 CoreFoundation 0x37b7939e CFRunLoopRunInMode + 98
6 Foundation 0x34ebcb7e -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 250
7 Foundation 0x34ed652c -[NSRunLoop(NSRunLoop) run] + 72
8 JAYPORE 0x00108a9a 0x5e000 + 699034
9 Foundation 0x34ec8a8a -[NSThread main] + 66
10 Foundation 0x34f5c59a __NSThread__main__ + 1042
11 libsystem_c.dylib 0x376e7c16 _pthread_start + 314
12 libsystem_c.dylib 0x376e7ad0 thread_start + 0
Thread 9:
0 libsystem_kernel.dylib 0x30284cd4 __workq_kernreturn + 8
1 libsystem_c.dylib 0x376e230a _pthread_wqthread + 610
2 libsystem_c.dylib 0x376e209c start_wqthread + 0
Thread 10:
0 libsystem_kernel.dylib 0x30284cd4 __workq_kernreturn + 8
1 libsystem_c.dylib 0x376e230a _pthread_wqthread + 610
2 libsystem_c.dylib 0x376e209c start_wqthread + 0
Thread 11:
0 libsystem_kernel.dylib 0x30284cd4 __workq_kernreturn + 8
1 libsystem_c.dylib 0x376e230a _pthread_wqthread + 610
2 libsystem_c.dylib 0x376e209c start_wqthread + 0
Thread 0 crashed with ARM Thread State:
r0: 0x00000000 r1: 0x00000000 r2: 0x00000001 r3: 0x00000000
r4: 0x00000006 r5: 0x3f504ce8 r6: 0x30caec02 r7: 0x2fe5c4ec
r8: 0x00000006 r9: 0x00000000 r10: 0x00000005 r11: 0x2fe5c558
ip: 0x00000148 sp: 0x2fe5c4e0 lr: 0x37725f5b pc: 0x3028432c
cpsr: 0x00000010
Binary Images:
0x5e000 - 0x14efff +JAYPORE armv7 <a9b02230373d3b4aba282d21f94fb780> /var/mobile/Applications/EF2C944B-4C26-4EB6-B41E-F89CF2232ADB/JAYPORE.app/JAYPORE
0x1178000 - 0x1182fff AccessibilitySettingsLoader armv7 <45d7c264810c364b976dba254572d73d> /System/Library/AccessibilityBundles/AccessibilitySettingsLoader.bundle/AccessibilitySettingsLoader
0x2fe5d000 - 0x2fe7efff dyld armv7 <be7c0b491a943054ad12eb5060f1da06> /usr/lib/dyld
0x3001c000 - 0x30179fff libmecabra.dylib armv7 <170c82a3c716372abe7ae0aae96d4805> /usr/lib/libmecabra.dylib
...バイナリ画像の長いリスト。
ここで、「atos」を使用してスレッド0からクラッシュの理由を取得すると(クラッシュの原因になります)
3 MyAppName 0x00104aa0 0x5e000 + 682656
上記のアドレスを使用すると、次の出力が得られます。
MAC66:Resources sourabhbhardwaj$ atos -arch arm -o /Users/myPath/MyAppName.app.dSYM/Contents/Resources/DWARF/MyAppName 0x00079f6c 0x78000 + 8044
-[FirstViewController setUIAndText] (in MyAppName) (FirstViewController.m:85)
-[SecondViewController DeleteByID:] (in MyAppName) (SecondViewController.m:415)
+
-[MyController viewWillAppear:] (in MyAppName) (MyController.m:137)
これは私が作った実際のクラッシュラインではありません。他のViewControllerでクラッシュしましたが、出力がまったく異なります。どうすればこれが可能になりますか?はい、そのバイナリにまったく同じdSYMファイルを使用していることをクロスチェックしました。
クイックヘルプが必要です。
ありがとうSourabh