使用XCode进行调试

手机上的内存是共享资源。 管理不当的应用程序会耗尽内存,崩溃并遭受性能急剧下降的困扰。

当我们将内存的给定部分分配给一组对象,而在使用完它们后忘记释放它,则会发生内存泄漏。 这意味着系统永远无法回收内存并将其用于其他用途,这最终意味着我们将耗尽可用内存。

尝试查找内存泄漏时,一个好的第一步是运行该应用程序,并查看Xcode中的内存使用情况图。 如果在使用应用程序时内存使用量趋于增加,则可能是某些内存没有适当释放。

内存图

Xcode内存图调试器有助于查找和修复保留周期和泄漏的内存。 激活后,它将暂停应用程序执行,并显示当前堆中的对象以及它们之间的关系以及哪些引用使它们保持活动状态。

可以通过选择“内存图”来启动“内存图”调试器
调试菜单栏中的调试器按钮。 在下面的文章中了解有关内存图调试的信息。

iOS-使用Xcode内存图调试器识别内存泄漏
来自petethedeveloper.com medium.com的交叉发布 在Xcode 9中使用内存图调试器
我从未真正花费时间来正确学习如何使用乐器。 当然,我知道如何使用Time Profiler和… medium.com

可能会有所帮助

主线程检查器

选择您的应用方案->产品>方案>编辑方案

方案1:如果主线程检查器“未检查 ”。

在多线程环境中使用Logger。

线程清理程序告诉我们,由于多个线程正在访问我们的日志并间接访问logEventSource,因此存在竞争状态。 这将导致我们发生意外的行为,这可能很难跟踪或复制。

现在我们如何避免这种情况?

  1. 同步功能代码。
  2. 互斥锁
  3. 信号
  4. GCD

让我们使用苹果推荐的方法:

生成的崩溃报告通常显示每个堆栈跟踪帧的内存地址,而不是源代码位置。 这使得很难确定错误在代码中发生的位置。这些调试符号包含所需的信息,以从内存地址转换为关联的源文件和行号。

象征性

符号化是将返回地址转换回人类可读的方法/文件名和行号的过程。

符号化使您更容易识别错误的根源并及时解决错误。

  1. 编译源代码时,编译器会将人类可读的源代码转换为机器可读的代码,并创建一个已编译的二进制文件。 它还会生成调试符号和映射表。 如果您看到映射表,则每个调试符号都将映射到已编译二进制文件中的确切机器指令,并映射到生成它的源代码中的行号。
  2. 有两种类型的构建,一种是调试构建,另一种是发行版本。 因此,根据构建设置,默认情况下,调试构建将调试符号存储在二进制文件中,另一方面,发布构建将调试符号存储在dSYM文件中以减小二进制文件的大小。 在构建过程中,XCode将从主可执行文件( 二进制 )中剥离所有调试信息,并将其放入名为dSYM的特殊文件中。 这有助于使我们的可执行文件更小,更易于分发给用户。

可能会有所帮助

谢谢!!!