查看导致pthread_mutex_lock死锁的原因

时间:2013-07-06 08:25:28

标签: xcode multithreading core-data lldb

我有一个Core Data iOS应用程序,它在后台进程中使用私有队列并发。我遇到了一个僵局,导致用户界面不时冻结(相当规律,说实话) - 但我从调试器(LLDB)得到的所有信息都是它停留在pthread_mutex_lock上。堆栈跟踪不再是那个,这使得调试几乎不可能:

thread #1: tid = 0x2503, 0x3b5060fc libsystem_kernel.dylib`__psynch_mutexwait + 24, stop reason = signal SIGSTOP
frame #0: 0x3b5060fc libsystem_kernel.dylib`__psynch_mutexwait + 24
frame #1: 0x3b44f128 libsystem_c.dylib`pthread_mutex_lock + 392

XCode流程窗格同样只显示堆栈上的这两个条目。

我对这种多线程的东西很陌生,所以我完全不知道从哪里开始修复这个问题。有关如何进行调试的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您的堆栈显然超过两帧,您无法使用pthread_mutex_lock启动一个线程。因此,堆栈框架的截断很明显只是lldb开卷中的一个错误。如果您有ADC帐户,请在bugreporter.apple.com上提交相关错误。此外,如果您没有使用最新版本的lldb,您可以尝试一下,也许它可以修复您看到的任何错误。您可以并排安装多个Xcode,这样您就不必删除当前使用的Xcode来尝试更新的Xcode。

当您的应用进入此状态时,您可能还会尝试使用另一种工具来为您提供回溯(例如,仪器时间分析器),因为它使用不同的退绕器。这至少可以让你看到完整的回溯是什么。