如何调试 wait_fences 错误
Posted
技术标签:
【中文标题】如何调试 wait_fences 错误【英文标题】:how do I debug a wait_fences error 【发布时间】:2012-07-12 18:02:34 【问题描述】:wait_fences:收不到回复:10004003
我继续收到此错误。它发生在我的应用程序启动时。我将如何调试这个问题。有什么方法可以让我观察 wait_fences,看看那里发生了什么。有什么方法可以查看哪些线程阻塞了什么?
感觉这个错误只不过是一个没有工具或信息进入或离开虚空的黑洞。
任何有调试此错误提示的人将不胜感激。
新
我现在改变了我的线程,所有线程调用都通过这个方法集来完成他们所有的调度
注意: 另外,我希望你们不要仅仅因为看到有关此问题的另一个问题而投票结束我的问题。没有关于此错误的真实信息。我需要知道是什么导致了这个错误和/或如何调试它。不是常见的“将超级调用添加到您的 viewDidAppear 等。如果这些有帮助,我就不会问这个问题了。
+ (void) ensureDispatchOfBlock:(dispatch_block_t) block onQueue:(dispatch_queue_t) queue async:(BOOL) async
if (dispatch_get_current_queue() == queue)
block();
else
if (async)
dispatch_async(queue, block);
else
dispatch_sync(queue, block);
+ (void) ensureDispatchOnMainThread:(dispatch_block_t) block async:(BOOL) async
[self ensureDispatchOfBlock:block onQueue:dispatch_get_main_queue() async:async];
+ (BOOL) addBlock:(dispatch_block_t) block toQueue:(dispatch_queue_t) queue async:(BOOL) async
if (!async && dispatch_get_current_queue() == queue)
return NO;
if (async)
dispatch_async(queue, block);
else
dispatch_sync(queue, block);
return YES;
【问题讨论】:
您是否尝试在后台线程上更新 UI 元素? 你检查了吗***.com/questions/1371346/…***.com/questions/8032987/…***.com/questions/1202300/…***.com/questions/4241894/… 我确实检查了所有这些。我不相信我正在做任何动画,但我有两种竞争方法正在高优先级线程上调度。我评论一个或另一个,我仍然得到错误,评论两者都会使错误消失。我正在处理所有线程部分,以便仅在需要时将它们转换为检查和调度。但我认为 dispatch_async 将它们放在我希望它们连续运行的队列中。 我已经从我的启动中删除了 UI 代码,并且我已经修改了所有调度以使用上面提供的代码。在我运行应用程序的 4 次中,仍然会弹出 3 次错误 【参考方案1】:该错误通常是由于尝试为屏幕上不可见的内容设置动画而出现的。如果它发生在启动时,我猜你正试图在 viewDidLoad 中启动动画。
【讨论】:
【参考方案2】:我会寻找对超级视图(Did/Will)Appear 的丢失调用。如果省略这些,您将看到“等待围栏”,无论这意味着什么。
【讨论】:
我也检查了这个。我所有的电话都叫他们的超级电话,所有的 UI 编辑电话要么确实出现了,要么在 dispatch_async 到 main 上,我真正想要的是关于这个错误的更多信息。我正在转换我所有的线程调用。希望这会有所帮助。 (仅在您不在请求的线程上时才调度,诸如此类)以上是关于如何调试 wait_fences 错误的主要内容,如果未能解决你的问题,请参考以下文章
wait_fences:未能收到回复:10004003 - viewDidLoad
UIAlertView:wait_fences:未能收到回复:10004003
UIAlertView wait_fences:未能收到回复:10004003
为啥我会收到此代码的“wait_fences:未能收到回复”?