1

iTunesから取得したクラッシュログで、どのスレッドの情報を掘り下げるのか理解できません。

スレッド16がクラッシュしたと表示されます。それで、[FreePlayMenuScenedealloc]内のコードを調べる必要がありますか、それとも原因が別のスレッドにある可能性がありますか?たとえば、スレッド0には、NSDateFormatterへの言及がありますが、関連があるかどうかはわかりません。

これを一般的な質問として尋ねるには、クラッシュログを読み取るときに、クラッシュしたスレッドのみを調べる必要がありますか、それとも他のスレッドにも役立つ情報がある可能性がありますか?残念ながら、私はここやオンラインのどこにも同様の質問を見つけることができませんでした。

コードは次のとおりです。

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Crashed Thread:  16

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libicucore.A.dylib              0x3333feac udat_close + 0
1   CoreFoundation                  0x37cd60d0 __CFDateFormatterDeallocate + 12
2   CoreFoundation                  0x37c513ce CFRelease + 290
3   Foundation                      0x354795ea -[NSDateFormatter _clearFormatter] + 22
4   Foundation                      0x354a4b44 -[NSDateFormatter dealloc] + 52
5   libobjc.A.dylib                 0x34b95484
6   CoreFoundation                  0x37c5343c _CFAutoreleasePoolPop + 12
7   Foundation                      0x35500978 __NSThreadPerformPerform + 600
8   CoreFoundation                  0x37ce5680         9   CoreFoundation                   0x37ce4ee4 __CFRunLoopDoSources0 + 208
10  CoreFoundation                  0x37ce3cb2 __CFRunLoopRun + 642
11  CoreFoundation                  0x37c56eb8 CFRunLoopRunSpecific + 352
12  CoreFoundation                  0x37c56d44 CFRunLoopRunInMode + 100
13  GraphicsServices                0x345592e6 GSEventRunModal + 70
14  UIKit                           0x345c32fc UIApplicationMain + 1116
15  AClockworkBrain                 0x0000365a main (main.m:13)
16  AClockworkBrain                 0x0000361c start + 36

...
...

Thread 16 Crashed:
0   AClockworkBrain                 0x001d7cd2 -[CCScheduler unscheduleAllSelectorsForTarget:] + 126
1   AClockworkBrain                 0x001ca8f8 -[CCNode unscheduleAllSelectors] + 48
2   AClockworkBrain                 0x001c9526 -[CCNode cleanup] + 38
3   AClockworkBrain                 0x001f1016 -[CCArray makeObjectsPerformSelector:] + 54
4   AClockworkBrain                 0x001c9550 -[CCNode cleanup] + 80
5   AClockworkBrain                 0x001f1016 -[CCArray makeObjectsPerformSelector:] + 54
6   AClockworkBrain                 0x001c9550 -[CCNode cleanup] + 80
7   AClockworkBrain                 0x001c9cf4 -[CCNode removeAllChildrenWithCleanup:] + 156
8   AClockworkBrain                 0x00078ecc -[FreePlayMenuScene dealloc] (FreePlayMenuScene.m:776)
9   Foundation                      0x35500e4c __NSFinalizeThreadData + 1004
10  CoreFoundation                  0x37ce0f7e __CFTSDFinalize + 62
11  libsystem_c.dylib               0x37ab9128 _pthread_tsd_cleanup + 172
12  libsystem_c.dylib               0x37ab8dfe _pthread_exit + 114
13  libsystem_c.dylib               0x37ad2160 pthread_exit + 24
14  Foundation                      0x35489226 +[NSThread exit] + 6
15  Foundation                      0x35500696 __NSThread__main__ + 998
16  libsystem_c.dylib               0x37ac630e _pthread_start + 306
17  libsystem_c.dylib               0x37ac61d4 thread_start + 4

どうもありがとう。

4

2 に答える 2

3

まあ、決して言わないでください: あるスレッドが何かを実行すると、別のスレッドが例外をスローしてクラッシュする場合が常にあります。ただし、それが発生した場合、通常は何らかのタイミングの問題または競合状態が発生しており、クラッシュが発生したときに問題を起こすスレッドが常に同じ場所にあることはまれです。このような状況では、不良スレッドが「トラップを設定」し、クラッシュしているスレッドがトラップに引っ掛かります。

あなたの場合、複数のスレッドで NSDateFormatter を共有していない限り、日付の書式設定は関係ないと思います (しないでください、スレッドセーフではありません)。

例外は EXC_BAD_ACCESS (無効なメモリ アドレスへのアクセス) であり、これは で発生し[CCScheduler unscheduleAllSelectorsForTarget:]ているため、Cocos2D シーン グラフのどこかに不良ポインタが潜んでいると推測されます。オーバーリリースされたノードを追加したのではないでしょうか? 言いにくい。この場合、別のスレッドに問題があるとは限りませんが、別のコードによって問題が設定されたようで、このコードが問題を引き起こしているようです。

于 2012-10-15T19:53:20.207 に答える
2

最も重要なのは、実際にクラッシュしたスレッドです。ただし、クラッシュは、その時点で他のスレッドで何が起こっているかによって影響を受ける可能性があることに注意してください。ただし、ほとんどの場合、関連するのはクラッシュしたスレッドのみです。クラッシュが実際に複数のスレッドで行われていることに関連している場合、または複数のスレッドで行われるべきではない場合、他のスレッドについて心配します。

あなたが投稿したログでは、クラッシュ時にメインスレッドで日付フォーマッタの割り当てが解除されていました。おそらく、FreePlayMenuScene の問題とはまったく関係ありません。

于 2012-10-15T19:53:30.640 に答える