在释放内存地址时设置断点:lldb

时间:2018-03-13 16:11:40

标签: xcode free lldb

我的iOS应用程序在尝试双重释放该地址时会崩溃内存地址。我试过多种方法试图知道是什么导致双重免费,Ex:观察点或启用Zombies或使用Xcode中的Instruments但无济于事。有没有什么办法可以在那个内存地址上设置某种断点,以便它在被释放时会被击中,我会知道谁试图释放它?我还尝试在free方法上放置一个Symbolic断点,但由于连续的免费调用,它会挂起应用程序。

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用ASAN?你在你的项目的运行方案中打开它(这是第一项“地址消毒器”)。它将强制重建,因为它可以检测您的代码。但是它在你的代码中插入的检测将检测到double free,停止那里的进程,并向你显示malloc&的调用站点。该地址的第一个免费活动。这是一个非常有用的工具,用于检测此类内存问题。

答案 1 :(得分:1)

您需要一个条件断点。在free上创建符号断点,然后右键单击它并单击“编辑断点...”。

您需要在此处设置条件,以便仅为您的特定参数调用断点。使用LLDB的$arg1变量来引用free(您的内存块)的第一个参数,并根据其条件设置类似的内容:

$arg1 == 0x0000000000001234

但请使用您感兴趣的实际指针值。

继续。断点只会在释放该特定指针的内存块时触发。