如何在我的 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 应用程序冻结?

iOS 应用程序在设备上启动后连接调试器时冻结在空白屏幕上

如何调试和跟踪 ios ui 冻结问题?

[UIViewController initWithCoder:] 上的符号断点导致调试器冻结

iOS 7 应用程序冻结而没有崩溃

iOS5 核心数据获取冻结应用