0

Mac OS アプリをテストしようとしていますが、10.8 では問題なく動作しましたが、Mac 10.6.3 (iatkos s3) でテストを開始すると問題が発生しました。

まず、別のコンピューターを使用して 10.6.3 をインストールする必要があります。私の macbook air では 10.6.3 をインストールできないためです (ハードウェアはソフトウェアよりも新しいため)。私がしたことは、xcodeで実行し、.appファイルを取得し、10.6.3アプリケーションフォルダーに配置してから実行することでした。

私はそこにいくつかのトレースログを置き、これが私のコードです:

- (void) startMethodInBackground: (id) sender {
    NSLog(@"line 101"); //this shows
    [self performSelectorInBackground:@selector(myOtherMethod:) withObject:sender];
    NSLog(@"line 102"); //not showing
}

- (void) myOtherMethod: (id) sender {
    NSLog(@"line 201"); //not showing 
    @autoreleasepool {
        NSLog(@"line 202"); //again not showing
        @synchronized (self) {
            NSLog(@"line 203"); //not showing
            ... ...
        }
    }
}



Version:         1.0 (1)
Code Type:       X86-64 (Native)
Parent Process:  launchd [1126]

Date/Time:       2013-02-28 16:53:10.668 -0500
OS Version:      Mac OS X 10.6.3 (10D573)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
Crashed Thread:  2
... (too long so I trimmed it)
...
    Thread 2 Crashed:
0   ???                             000000000000000000 0 + 0
1   com.apple.Foundation            0x00007fff814e4ead __NSThread__main__ + 1429
2   libSystem.B.dylib               0x00007fff86db38b6 _pthread_start + 331
3   libSystem.B.dylib               0x00007fff86db3769 thread_start + 13

Thread 2 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x0000000100863400  rcx: 0x0000000000000000  rdx: 0x00000001001417b0
  rdi: 0x00000001001417b0  rsi: 0x0000000000000000  rbp: 0x0000000100480c90  rsp: 0x0000000100480b08
   r8: 0x0000000000000000   r9: 0x0000000100201530  r10: 0x0000000100210870  r11: 0x0000000100002120
  r12: 0x00007fff5fbfe800  r13: 0x0000000000001b07  r14: 0x00007fff814e4918  r15: 0x0000000102e0ec20
  rip: 0x0000000000000000  rfl: 0x0000000000010202  cr2: 0x0000000000000000

私のコードでわかるように、performSelectorInBackground: を使用して myOtherMethod: を呼び出すとすぐに、クラッシュしました!!

私の質問は次のとおりです。

  1. performSelectorInBackground の呼び出しがクラッシュした理由は?? performSelectorInBackground メソッドを確認したところ、10.6 で正常に動作するはずです (Apple のドキュメントでは 10.5 以降と記載されています)。

  2. クラッシュ レポートは私にはまったく意味がありません。実際にそのようなレポートを使用してデバッグするにはどうすればよいでしょうか。xcode では、問題があればクラッシュし、どのメソッドが問題を引き起こし、何が問題だったのかを教えてくれますが、ご覧のとおり、クラッシュ レポートはあまり教えてくれませんでした!

どんな助けでも大歓迎です。ジョシュ

4

1 に答える 1

0

破損したスタックのようです。

myOtherMethod大きな C 配列のように、大量のメモリを に割り当てているのではないでしょうか? myOtherMethodメインスレッドで呼び出すとどうなりますか?

于 2013-02-28T22:37:34.437 に答える