【问题标题】:How can I find out where the message is sent from我怎样才能知道消息是从哪里发送的
【发布时间】:2012-12-25 07:55:40
【问题描述】:

我正在使用开源库的 obj-c 端口,其中似乎存在错误。 它非常大,单步通过它并不是一个真正的选择。

我已经能够弄清楚崩溃是由以下原因引起的。

-[CALayer release]: message sent to deallocated instance 0x1d847aa0

有没有办法让我找出消息的来源,或者更好的是找出隐藏在后面的对象:0x1d847aa0

谢谢

【问题讨论】:

    标签: xcode debugging release nszombie


    【解决方案1】:

    您可以在“编辑方案...”设置的“诊断”选项卡中“启用僵尸对象”。

    如果将消息发送到已释放的实例,Xcode 将中断。

    您还可以使用 Instruments 进行配置,使用“僵尸”工具,这将显示僵尸对象的整个分配/保留/释放历史:

    【讨论】:

    • 我在方案中启用了僵尸对象。但是当我使用 Instruments (Product > Profile) 时,我无法选择“Zombies”,所以我选择了“Leaks”。然后我运行程序,当它崩溃时,一个带有 x 的小黑框被添加到时间线,我只是得到一个弹出窗口,上面写着 AppName Terminated。在我的控制台输出中,我收到上述错误消息 (CALayer release...)。
    • @Casper:奇怪,当我分析时,“Zombies”与“Allocations”和“Leaks”一起在 Instruments 的“Memory”部分。但是(我认为)Zombies 只是“分配”工具的一个选项,因此您可以使用“分配”启动 Instruments,单击小“i”图标和“启用 NSZombie 检测”。 - Xcode 方案中的“Enable Zombie Objects”选项仅在您在 Xcode 中运行项目时使用,不适用于 Instruments。
    • 我找到了。当我在模拟器中运行时出现。我通常直接在设备上进行测试。
    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2016-11-03
    • 2020-04-06
    • 1970-01-01
    相关资源
    最近更新 更多