2

我有一个在后台进程中使用私有队列并发的 Core Data iOS 应用程序。我遇到了一个死锁,导致 UI 不时冻结(老实说,相当经常) - 但我从调试器 (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 进程窗格同样只显示堆栈上的这两个条目。

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

4

1 回答 1

2

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

当您的应用程序进入此状态时,您还可以尝试使用其他工具来为您提供回溯(例如 Instruments 时间分析器),因为它使用不同的展开器。这至少会让你看到完整的回溯是什么。

于 2013-07-18T01:30:16.150 回答