- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我们的应用程序似乎半随机地卡在 psynch_mutexwait。它似乎与更新存储在 CoreData 中的一堆数据的后台进程有关 - 但我完全无法弄清楚究竟是谁锁定了导致死锁的原因。
以下是 lldb 给我的完整堆栈跟踪 - 这显然是不完整的,并且线程 1 的最后一帧是伪造的。在此之前的几行,我在该方法中设置了一个断点,但它从未被击中。
有什么方法可以确定正在等待的锁是什么? (甚至获得正确的堆栈跟踪?)当然,这涉及大量代码,这使得随机 NSLog 语句成为一项艰巨的任务。
(lldb) bt all
* thread #1: tid = 0x2503, 0x39da20fc libsystem_kernel.dylib`__psynch_mutexwait + 24, stop reason = signal SIGSTOP
frame #0: 0x39da20fc libsystem_kernel.dylib`__psynch_mutexwait + 24
frame #1: 0x39ceb128 libsystem_c.dylib`pthread_mutex_lock + 392
frame #2: 0x00022068 OnDeck`-[AttendanceWorkoutsController buildTable](self=0x00000003, _cmd=0x00000000) + 508 at AttendanceWorkoutsController.m:100
thread #2: tid = 0x2803, 0x39d92648 libsystem_kernel.dylib`kevent64 + 24
frame #0: 0x39d92648 libsystem_kernel.dylib`kevent64 + 24
frame #1: 0x39ccb4f0 libdispatch.dylib`_dispatch_mgr_invoke + 796
thread #5: tid = 0x2b03, 0x39d91eb4 libsystem_kernel.dylib`mach_msg_trap + 20
frame #0: 0x39d91eb4 libsystem_kernel.dylib`mach_msg_trap + 20
frame #1: 0x39d9204c libsystem_kernel.dylib`mach_msg + 40
thread #6: tid = 0x242f, 0x39d91eb4 libsystem_kernel.dylib`mach_msg_trap + 20
frame #0: 0x39d91eb4 libsystem_kernel.dylib`mach_msg_trap + 20
frame #1: 0x39d9204c libsystem_kernel.dylib`mach_msg + 40
thread #7: tid = 0x2c03, 0x39da2594 libsystem_kernel.dylib`select$DARWIN_EXTSN + 20
frame #0: 0x39da2594 libsystem_kernel.dylib`select$DARWIN_EXTSN + 20
frame #1: 0x31bff1f6 CoreFoundation`__CFSocketManager + 678
thread #8: tid = 0x2d03, 0x39da2d98 libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x39da2d98 libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x39cf0cfa libsystem_c.dylib`_pthread_workq_return + 18
(lldb)
最佳答案
通过让几个人查看代码并追踪冗长复杂的代码路径,我们发现了似乎是罪魁祸首。在后台线程中运行的一种方法是查找和使用一些核心数据对象以及使用主线程上下文。
如果 IOS 提供有用的堆栈跟踪,肯定会有很大帮助。
关于ios - 应用挂起在 __psynch_mutexwait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18344098/
我们的应用程序似乎半随机地卡在 psynch_mutexwait。它似乎与更新存储在 CoreData 中的一堆数据的后台进程有关 - 但我完全无法弄清楚究竟是谁锁定了导致死锁的原因。 以下是 lld
我的应用有时会变成dead,调用堆栈如下所示, 更新: 我用了两天,还是搞不定。 我拥有的是每个线程的上下文,以及一个特殊串行队列的保留上下文。 我想知道的是死锁是怎么来的。 为什么所有线程都处于等待
我正在使用 AVFoundation 的 MusicPlayer 在游戏中播放 MIDI 音乐,我会定期调用 MusicPlayerSetPlayRateScalar 来设置速度。我最近将游戏从 Ob
我是一名优秀的程序员,十分优秀!