iPhone OS内存问题 - 如何调试?
-
18-09-2019 - |
题
我有一个很奇怪的问题,在我的iPhone应用程序是,我认为,与记忆越来越损坏:
在一个点上,我需要数组排序,这是我与-[sortArrayUsingFunction]
做。
结果是不正确的,除非我任一方法调用之前分配的东西,如void *test = malloc(2 * sizeof( int ))
一些存储器或有,例如,呼叫到NSLog()
(这是永远不会调用)在分拣功能。
在换句话说:仅排序,如果我稍微增加这是调用排序功能前用的存储器的工作原理。我想这是因为在某些时候,内存被损坏。
你怎么调试这样呢?
解决方案
这听起来似乎有些代码的使用已经发布的对象。很多与调试这种错误的帮助是在苹果的伟大的Mac提供OS X调试魔术的技术说明,尤其是基础一部分。
有关你的情况我会禁用自动释放池(设置环境变量NSEnableAutoreleasePool=NO
),或使用僵尸功能(NSZombieEnabled=YES
)找到地方,你将消息发送到发布对象。
其他提示
尝试Valgrind的下在模拟器运行程序:
和如何使用它的模拟器下:
http://landonf.bikemonkey.org/code/iphone/iPhone_Simulator_Valgrind .20081224.html
您可以具有取决于它被安装在那里以改变代码示例Valgrind的路径。
这样的事情可以调试一个挑战。有一些工具用于检测出界外的访问,并这样在其他平台上,所以我相信会有一些为iPhone,但我不知道有什么。
也许你应该存储阵列的两个副本,并加以比较的差异。打印出的差异。这被引入到阵列中的一个“垃圾”的性质,可能给一个提示,它是从哪里来的。
也正好经过这点之前运行的代码,并重新读取它(或更好,但让别人读它)。你可能会看到一个错误。