【问题标题】:XCode Instruments - find a line where code is leakingXCode Instruments - 找到代码泄漏的行
【发布时间】:2012-08-22 02:49:51
【问题描述】:

一旦在 4.3.2 中检测到泄漏,有没有办法让它带您到发生泄漏的代码行?在文档中它说:

定位泄漏内存。 . .

  1. 打开泄漏工具。
  2. 从“选择目标”弹出式菜单中选择您的应用。
  3. 点击录制按钮。
  4. 锻炼您的应用程序以执行代码,并在显示泄漏时单击停止按钮。
  5. 单击“详细信息”窗格中标识的任何泄漏对象。
  6. 在“扩展详细信息”窗格中,双击代码中的指令。
  7. 单击详细信息窗格中的 Xcode 图标以在 Xcode 中打开该代码。

当我双击扩展详细信息下的对象时,它不会打开代码,而是打开一个窗口,类似:+0x30 testq %rax, %rax

【问题讨论】:

    标签: xcode cocoa memory-leaks instruments


    【解决方案1】:

    当您在扩展详细视图中双击调用堆栈中的函数时,该函数是您编写的函数吗?如果您双击不是您编写的函数,例如来自 Cocoa 框架的方法,您将获得与您在问题中列出的一样的汇编语言指令。您必须双击您为 Instruments 编写的函数才能显示您的代码。

    Instruments 中的调用树视图可以更轻松地找到代码中泄漏内存的区域。从跳转栏中选择调用树。窗口左侧是带有一系列复选框的调用树部分。选择 Invert Call Tree 和 Hide System Libraries 复选框可以更轻松地在调用树中找到您的代码。双击调用树中的一个函数以打开源代码视图,该视图将显示分配泄漏内存的代码行。

    【讨论】:

    • 谢谢,看起来这不是我的功能之一。我按照您所说的使用支票簿并关闭了 Sys Libraries,我只列出了一个带有符号名称“start”的泄漏......嗯,看看是什么代码导致了它。现在,当我从下拉列表中选择泄漏时,泄漏的对象是我的类之一,而“责任框架”是 -[NSCustomObject nibInstantiate] - 我不知道那是...
    • 好的,我修复了泄漏 - 它与 MainMenu.xib 中的一个类的启动有关,短语“start”是一个线索。手指交叉,我不会再看到它了。
    • 我可以看到树,但是调用会显示我的应用名称和一些内存地址。仪器还需要什么才能链接回代码?
    • @Efren Instruments 可能无法找到包含函数名称的 dSYM 文件。在 Instruments 中选择 Instrument > Call Tree Data Mining > Locate dSYM。 dSYM 文件通常与项目发布版本的应用程序包位于同一目录中。
    • 谢谢@Mark,它似乎在抱怨UUID不匹配,可能是因为使用了cocoapods吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2013-01-26
    • 2016-03-30
    • 1970-01-01
    • 2011-07-21
    • 2011-10-10
    • 2012-01-05
    • 2010-12-01
    相关资源
    最近更新 更多