【问题标题】:Using instruments tool to locate leaks使用仪器工具定位泄漏
【发布时间】:2019-08-18 00:01:00
【问题描述】:

我正在尝试使用泄漏工具在我的应用中查找泄漏。 当应用程序启动时,我可以看到 106 次泄漏,但我很难找到它们。

在图片中,您可以看到列表的一部分,但如何深入到产生泄漏的类或代码行?

【问题讨论】:

  • 在任何高级之前,使用调试内存图找到那些紫色的!并解决它们
  • @E.Coms 你能详细说明一下吗?
  • 在 SO 中搜索 debug memory graph。喜欢这里stackoverflow.com/questions/44803692/…

标签: ios memory-leaks instruments xcode-instruments


【解决方案1】:

发现漏洞并不是那么简单。您需要戴上侦探帽,从外套中取出放大镜并开始寻找线索。即

对于每个泄露的对象,都有一个负责的库。如果它是 UIKit、Foundation 或任何低级别的,您将无法确定导致泄漏的代码的位置,因为这些库是二进制文件的形式。

如果负责的库是您正在编写的库,那么您可以通过单击右侧堆栈跟踪面板中的正确方法来访问代码。一个提示是,如果有相应的代码可用,则堆栈跟踪面板中列出的方法会突出显示。

但是,由于它不是那么直截了当,通常您自己的一段代码会导致一些内部库泄漏,这很难调试。在开始之前,您需要阅读一些教程和练习材料。在stackoverflow上肯定无法回答的事情。

【讨论】:

  • 问题是我无法通过堆栈跟踪面板访问我的代码,我做错了什么吗?
【解决方案2】:

您可以在屏幕右侧看到堆栈数。然后滚动到创建泄漏的类和方法。有时很难理解为什么会泄漏。

看看我的头像

我有 TermsViewController 和 NSMuttableAttributed 字符串,它会造成内存泄漏。此外,如果我选择带有 TermsViewController.setupInfoText() 的行,它会打开代码。

【讨论】:

    【解决方案3】:

    如果要查找分配泄漏内存的代码,请使用跳转栏切换到调用树视图。要在调用树视图中找到您的代码,请反转调用树视图并隐藏系统库。

    在调用树视图中双击您的函数之一将让您深入到分配泄漏内存的代码行。

    阅读以下文章,了解有关使用 Instruments 查找内存泄漏的更多详细信息:

    Measuring Your App's Memory Usage with Instruments

    【讨论】:

    • 好的,所以我做到了,我得到了一些拼图。我可以看到大多数泄漏来自 cocoapods,例如:alamofire、swinjectstoryboard 等。这有意义吗?另外我仍然可以访问一些实际的代码
    • CocoaPods 中的外部框架可能存在内存泄漏。我没有在 CocoaPods 中使用 Instruments,所以我无法告诉您是否有任何方法可以确定您的代码中存在哪些泄漏以及 CocoaPods 中存在哪些泄漏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2012-04-06
    • 2012-06-11
    • 2011-07-11
    • 2011-05-18
    相关资源
    最近更新 更多