我有一个非常奇怪的问题。每次我在iPhone模拟器中运行特定的代码时,我的整个Mac都会冻结:我无法关闭模拟器或任何其他应用程序,也无法打开任何应用程序。最糟糕的是,我无法关闭。我必须通过按住电源按钮手动关闭。
我正在运行15“MacBook Pro,唯一运行的是Xcode和iPhone模拟器。我使用Activity Monitor来关闭在后台运行的任何不必要的应用程序。我也使用OnyX来清理我的系统。
我正在使用Xcode 3.2.4,iOS 3.2(iPad模拟器)。
起初我怀疑这是一个处理器问题 - 所以我在运行Activity Monitor时运行相同的代码来引发崩溃。我仍然可以在冻结时切换应用程序,我无法打开/关闭任何或使用Xcode或iPhone模拟器做任何事情。 Activity Monitor报告称有足够的空间进行更多处理,因此不可能。我的系统内存不是很低。如果我错过了任何可能有助于调试的内容,请发表评论,我会找到相关信息。我想尽快解决这个问题。
有问题的代码处理一堆定时器,3个后台线程和大量UDP数据包。后台线程是:两个UDP接收线程和一个发送线程。后台线程运行一个常量循环,在两个不同的端口上查找数据。发送线程运行另一个常量循环,但只在其队列中有任何数据时发送数据。 UDP处理只使用socket(),bind(),sendto(),recvfrom()和select()调用。
我的印象是,当前Xcode项目中的任何问题只会在iPhone模拟器中变得明显 - 过度释放只会使模拟器崩溃等等。如何使操作系统崩溃,而不是模拟器崩溃? / p>
编辑:它在设备上运行得非常好。不崩溃,不报告任何内存问题,nada。
答案 0 :(得分:1)
要查看后台线程是否卡在被阻止的网络呼叫上,请在每次可能的阻塞调用之前和之后将NSLog(或fprintf放入文件并将其刷新),并在调试器控制台可见的情况下运行。