0

新しいスレッドを作成した直後にプログラムがセグメンテーション違反になるという小さな問題が時々発生します。

新しいスレッドには次のようなバックトレースがあります。

Thread 24 Crashed:
0   libsystem_c.dylib                   0x00007fff8ea3c358 _spin_lock$VARIANT$mp + 8
1   libsystem_c.dylib                   0x00007fff8e9e9f25 _pthread_exit + 55
2   libsystem_c.dylib                   0x00007fff8e9ea27d pthread_exit + 30
3   libsystem_c.dylib                   0x00007fff8e9a022b cthread_set_errno_self + 76
4   libsystem_kernel.dylib              0x00007fff87cd701d cerror + 33
5   libsystem_c.dylib                   0x00007fff8e9e88bf _pthread_start + 335
6   libsystem_c.dylib                   0x00007fff8e9ebb75 thread_start + 13

クラッシュ時の CPU の状態は次のとおりです。

Thread 24 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x0000000000000001  rcx: 0x00007fff87cd55ba  rdx: 0x00000000ffffffff
  rdi: 0x0000000101f0e010  rsi: 0x0000000000000001  rbp: 0x0000000101f0de70  rsp: 0x0000000101f0de08
   r8: 0x0000000101f0e010   r9: 0x0000000000000001  r10: 0x00007fff87cd5ca6  r11: 0x0000000000000202
  r12: 0x0000000000000032  r13: 0x0000000101f0e000  r14: 0x0000000101f0e000  r15: 0x0000000007010101
  rip: 0x00007fff8ea3c358  rfl: 0x0000000000010286  cr2: 0x0000000101f0e010
Logical CPU: 0

cr2==rdir8; これらの実際のコードを見ないと、このアドレスが無効である理由を推測することしかできません。

これは の問題のようですがerrno、どの (AFAIK) がスレッド ローカル ストレージですか?

これは、プログラムの他の場所でのヒープまたはその他のメモリの破損が原因である可能性はありますか? この特定の問題は再現が非常に困難ですが、可能であれば問題を解決していただければ幸いです。

4

0 に答える 0