我有一个 super 奇怪的问题。每次我在 iPhone 模拟器中运行一段特定的代码时,我的整个 Mac 都会卡住:我无法关闭模拟器或任何其他应用程序,也无法打开任何应用程序。最糟糕的是,我无法关机。我必须按住电源按钮手动强制关机。
我在 15"MacBook Pro 上运行,唯一运行的是 Xcode 和 iPhone 模拟器。我使用 Activity Monitor 关闭后台运行的任何不必要的应用程序。我还使用 OnyX 进行清理我的系统。
我正在使用 Xcode 3.2.4 和 iOS 3.2(iPad 模拟器)。
起初我怀疑这是处理器问题 - 所以我在运行 Activity Monitor 时运行了相同的代码以引发崩溃。卡住时我仍然可以在应用程序之间切换,我只是无法打开/关闭任何应用程序或使用 Xcode 或 iPhone 模拟器做任何事情。事件监视器报告说有足够的空间进行更多处理,所以不可能。我的系统内存不足。如果我遗漏了任何可能有助于调试的内容,请发表评论,我会找到相关信息。我想尽快解决这个问题。
有问题的代码处理一堆计时器、3 个后台线程和大量 UDP 数据包。后台线程是:两个 UDP 接收线程和一个发送线程。后台线程运行一个恒定的循环,在两个不同的端口上寻找数据。发送线程运行另一个常量循环,但仅在其队列中有数据时才发送数据。 UDP 处理仅使用 socket()、bind()、sendto()、recvfrom() 和 select() 调用。
我的印象是,当前 Xcode 项目中的任何问题只会在 iPhone 模拟器中变得明显——过度发布只会使模拟器崩溃,等等。怎么可能使操作系统崩溃,而不使模拟器崩溃?
编辑:它在设备上运行得很好。不会崩溃,不会报告任何内存问题,nada。
最佳答案
要查看后台线程是否卡在阻塞的网络调用上,请在每个可能的阻塞调用之前和之后放置一个 NSLog(或 fprintf 到一个文件并将其刷新),并在调试器控制台可见的情况下运行。
关于iPhone 模拟器卡住整个操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892234/