如何在我的 iOS 应用程序中调试冻结问题
Posted
技术标签:
【中文标题】如何在我的 iOS 应用程序中调试冻结问题【英文标题】:How do I debug freezing issue in my iOS app 【发布时间】:2018-11-29 15:36:07 【问题描述】:我有一个用 Objective-C 制作的应用程序。这个应用程序总是正常工作。昨天,我的 Xcode 忽略了我创建的任何新内容,因此我将其更新为 Xcode 10.1 (10B61)。无论如何,我正在编辑另一个应用程序,而不是下一个。
在那之后,App Store 上更新了一个版本的应用程序(我在 2 天前发送了它),晚上 18 点,我的老板打电话给我,告诉我应用程序崩溃了。
今天,我确认应用程序没有崩溃,它正在死机。当任何这些事情发生时,它就会冻结:
-
打开或关闭键盘
打开或关闭任何活动
使用 AFNetworking 框架发出请求
我尝试对本月的 init 进行 git checkout,但仍然没有成功。所以我对过去一个月(10 月 9 日)的 init 进行了结帐,但它仍然处于冻结状态。但是这些版本的应用程序可以正常运行。
我尝试调试它,直到在程序集上,我可以修复 AFNetworking 有史以来第一次更改框架的代码。当应用程序尝试设置请求的标头时,有一个 dispatch_sync 冻结了应用程序,我可以将其更改为 dispatch_async 并修复 1/3 的问题,请求仍在异步处理。线路:./Pods/AFNetworking/Serialization/AFURLRequestSerialization.m:306
- (NSDictionary *)HTTPRequestHeaders
NSDictionary __block *value;
dispatch_sync(self.requestHeaderModificationQueue, ^
value = [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders];
);
return value;
现在我的老板告诉我,这两个应用程序都冻结了。而且我没有更新提到的第一个应用程序中的任何内容。这些应用来自同一个项目,它们的工作方式类似于优步。
有人知道发生了什么吗?
====EDIT0====
目前我们注意到该应用程序可以在另一台计算机上构建,并且与以前一样。因此,在我的 Mac 中构建的应用程序正在冻结,问题不在于代码、某些库、更新或其他什么。可能是我的电脑,我们将尝试使用另一台mac来构建和发送应用程序。
如果它解决了问题,我会将解决方案放在这里并与 Apple 支持联系。
【问题讨论】:
我建议你创建一个MCVE。创建一个空白项目,添加 AFNetworking,看看是否可以显示问题。可能你不会,所以你必须开始添加代码模式,按照你在应用程序中的方式,直到你能表现出问题。 (另一种方法是复制您的项目,开始剔除与问题无关的所有内容,并继续重复此过程,直到您无法再表现出问题为止。)但是这个问题现在太宽泛了。 如果你从同一个队列中调用dispatch_sync
,那么你已经创建了一个死锁。
听起来你需要一台新的 Mac
【参考方案1】:
问题是在我的 Mac 中构建的每个 ios 应用程序都开始在 dispatch_sync 函数中随机冻结。我将尝试格式化我的电脑或购买一台新电脑。
这确实没有意义,但解决了问题。
【讨论】:
以上是关于如何在我的 iOS 应用程序中调试冻结问题的主要内容,如果未能解决你的问题,请参考以下文章
如果暂停按钮不提供任何信息,如何调试 iOS 应用程序冻结?