Xcode - 涂鸦,防护边缘和防护malloc

时间:2012-03-06 19:18:26

标签: iphone ios xcode macos

有人可以解释Xcode中这些选项的作用吗?

  • 启用Scribble
  • 启用Guard Edge
  • 启用Guard Malloc

它们是什么,它们做了什么以及它们对于调试/测试有多大用处?

感谢。

2 个答案:

答案 0 :(得分:47)

来自documentation

  • 启用Scribble。用0xAA填充已分配的内存,用0x55填充已释放的内存。
  • 启用Guard Edge。在大量分配之前和之后添加保护页面。
  • 启用Guard Malloc。使用libgmalloc来捕获常见的内存问题,例如缓冲区溢出和use-after-free。

Scribble将通过覆盖任何曾经在内存块中释放的数据而免费使用内存块,这很明显。 保护边缘和Guard Malloc将帮助您查找内存溢出和(在某种程度上)读取和写入保护内存块后使用,以便在滥用内存时使程序崩溃更明显。

答案 1 :(得分:5)

上面的“文档”链接一般是Xcode,但更具体地说RN-MallocOptions详细介绍了这些(和其他)选项。

Jim Kubicek在Debugging Smashed Memory in Obj-C中展示了一个很好的例子,包括重要的“如何在Xcode中启用这些?”问题:

  

打开“编辑方案”窗口并导航到“诊断”选项卡。您需要打开“启用Scribble”和“Malloc Stack”。 ...简而言之,“Enabled Scribble”将使分配器将0xAA写入新分配的内存,并将0x55写入解除分配的内存。 “Malloc Stack”将记录您记忆的分配和免费历史记录。

如果您已经阅读过这篇文章,您可能会对Apple的技术说明感兴趣: