iPhone – 在模拟器上testing时出现奇怪的错误
当我点击一个UIAlertView的button时,我正在模拟器上testing我的应用程序。 我停止debugging,对代码进行了一些更改,并再次构build应用程序。 现在,当我运行该应用程序时,在控制台中出现此错误
无法在引导程序服务器上注册com.myApp.debug。 错误:未知的错误代码。 这通常意味着该进程的另一个实例已经在运行或挂在debugging器中。程序接收信号:“SIGABRT”。
我试图从模拟器中删除应用程序,做一个干净的生成,但我仍然遇到这个错误,当我尝试运行该应用程序。
我应该怎么做才能在我的模拟器上再次运行应用程序?
尝试退出并重新启动模拟器? 如果“糟糕的情况变得糟糕”,您可以随时尝试重新启动:按照我的经验,这应该可以解决问题。
状态:最近被视为Mac OS 10.8和Xcode 4.4。
tl; dr:这可以在两种情况下发生:在设备上运行时和在模拟器上运行时。 在设备上运行时,断开连接并重新连接设备似乎可以解决问题。
Mike Ashbuild议
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
这一直不工作。 事实上,它从来没有为我工作,但它在某些情况下显然有效。 只是不知道哪些情况。 所以值得一试。
否则,解决这个问题的唯一已知方法是重新启动用户launchd。 重启会做到这一点,但有一个不太激烈/更快的方式。 你需要创build另一个pipe理员用户,但是你只需要做一次。 当事情发生时,以自己身份注销,以该用户身份login,并终止属于主用户的launchd,例如,
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
用您的主用户名replaceuser_id
。 当您的普通用户恢复到正常状态时再次login。 有点痛苦,但不如完全重新启动。
细节:
Lion / Xcode 4.2开始出现这种情况。 (就我个人而言,我从来没有见过这样的组合。)
这个bug似乎在launchd中,当debugging器停止debugging而不杀死它的时候,这个buginheritance了app进程。 这通常表示应用程序成为僵尸,在ps中的进程状态为Z.
核心问题似乎在launchd中实现的引导程序名称服务器中。 这(据我了解)映射应用程序ID到马赫港口。 当错误被触发时,应用程序就会死亡,但不会被清除出引导程序服务器的名称服务器映射,因此引导服务器拒绝允许另一个应用程序实例以相同名称注册。
有人希望(见评论)强迫推迟wait()
僵尸会解决的事情,但事实并非如此。 这不是僵尸状态,这是核心问题(这就是为什么一些僵尸是良性的),但引导名称服务器,并没有已知的方法来清除这个短的杀死launchd。
它看起来像错误是由Xcode,GDB,和用户launchd之间的东西引发的。 我只是通过在iphone模拟器中运行一个应用程序来重复这个楔子,让它在gdb中停止,然后进行构build并运行到ipad模拟器。 它似乎对切换模拟器(iOS 4.3 / iOS 5,iPad / iPhone)很敏感。 这并不是一直发生,而是经常在切换模拟器的时候。
当你login时启动杀死会搞砸你的会话。 注销并重新login不会中止用户启动; OS X保持现有的stream程。 重新启动会修复一些事情,但这很痛苦。 上面的说明更快。
我向苹果提交了一个bug,FWIW。 rdar:// 10330930
我发现我已经开始与Lion + Xcode 4.2的这个问题。 我也遇到了Xcode 4.3的问题。
我已经尝试了所有的build议,但没有一个工作,而不是完全重新启动。
以下是您如何确定是否需要快速重新启动。
列出你所有的僵尸进程:
ps -el | grep 'Z'
如果您将您的应用程序列为僵尸进程,则需要重新启动计算机。 错误消息指出“这通常意味着该进程的另一个实例已经运行或挂在debugging器中”。 那么,Xcode是检测这个僵尸进程,你不能杀死。 您可以修复它的唯一方法是重新启动系统。 🙁
编辑,20120823:我有僵尸进程的一些更好的知识,所以我想更新这个答案。 当父进程没有在终止subprocess上调用wait()(等待进程改变状态)时,僵尸进程被创build。 你不能直接在僵尸进程上运行“杀死”,但是如果杀死了父进程,僵尸subprocess将被“收割”并从进程表中删除。
我很久没有看到这个问题,所以没有检查过这个情况下的父进程。 杀死父进程的替代方法是重启系统。 🙂
我只是遇到了这种情况:我只是在我的设备上得到错误,模拟器工作正常。 我最终不得不重置我的设备,错误消失了。
我最近经常遇到这个问题。 什么可以防止这种情况发生? 注销并修复问题,但是每隔一段时间就这样做很麻烦。
编辑:
我刚刚find原因。 我在ApplicationWillTerminate方法中有一个错误。 所以当我点击Xcode窗口上的停止button,应用程序无法正常终止,并开始挂起。
检查活动监视器,看看你的应用程序是否在列表中。 如果可能,强制退出。
如果你发现你的问题是由于僵尸进程:
ps -el | grep'Z'
(如前面的评论https://stackoverflow.com/a/8104400/464289 ),只是想立即解决问题,你可以做到这一点,而无需重新启动或杀死任何东西。 只需重命名您的项目目标可执行文件
- 点击左侧窗格中的项目
- 在中间窗格中selectBuild Settings
- 在“ 包装 ”下,将“ 产品名称 ”从$(TARGET_NAME)更改为$(TARGET_NAME).1
简单!
那么,没有答案,但至less还有一个testing要做。 打开terminal并运行以下命令:“ps-Ael | grep Z”。 如果你有两个条目,一个是“(叮当声)”,另一个是你的应用程序或公司名称,那么你可以重新启动。
如果您是开发人员,请input一个简短的错误,并告诉苹果公司如何非常恼人的重新启动,并提及他们可以将这个bug复制到我刚刚input的“rdar:// 10401934”。
大卫
重置iOS模拟器修复了我的错误。 虽然这将删除模拟器中的所有应用程序,但它可以解决问题,而无需重新启动计算机。
您可以通过执行以下操作来重置iOS模拟器:
1)进入“iOS模拟器”菜单,在主屏幕最左侧的Apple()徽标旁边。
2)select“重置内容和设置…”。
3)阅读popup消息,如果您同意,请点击“重置”,否则,请点击“不重置”。
我有僵尸进程提到的问题@jyap。 清除它们的唯一方法就是重新启动。 但是,我注意到我的朋友在同一个项目上工作会得到相同的问题,但可以杀死模拟器,而不会造成僵尸进程。 我完全卸载Xcode并重新安装它,虽然我仍然得到错误,它不会创build僵尸进程,所以我不必重新启动。
在我这样做之前,我正在使用这个非常丑陋的解决方法:更改您的应用程序ID并再次运行。 你最终在模拟器中的应用程序的垃圾副本,但你可以推迟一段时间重新启动。
这个错误发生在我身上,几乎每次我在模拟器中testing应用程序,迫使我重新启动。
这是一个解决方法,如果你想完成一些工作:
- 在项目导航器中点击您的项目
- 转到目标 – > 信息
- 为应用程序添加一个键不会在后台运行并设置为
YES
。
这将意味着当您按下模拟器中的主页button或退出模拟器时,应用程序不会挂起。
不要忘记在发行之前更改此设置! 把它放在你的发布清单:)
如果在iPhone上testing时发生这种情况。 只需重新启动手机。 从我所知道的电话或模拟器仍然认为有一个应用程序正在运行的实例,所以当它是最后一次运行它没有正确地终止做或者在你的代码错误或电话/模拟器只是想有一个呻吟。
我在iPhone 4上debugging我的应用时遇到了这个错误。硬重启iPhone解决了我的问题。 (关掉iPhone的电源…)
我的Mac上没有任何僵尸进程,重启Mac并没有解决问题。
也许这个错误可以显示在模拟器和实际设备上?
重新启动设备,工作! :d
谢谢大家的伟大的build议。
我只是有这个错误。 我尝试重新启动模拟器和Xcode,但我的项目只会在清理和构build后再次工作。 不知道是什么造成的。
我有一个recursion的setter,通过堆栈和杀死我的应用程序,我必须启动我的iPad的方式。 它可以在代码中修复。
- closures模拟器
- 停止应用程序在xCode中运行。
- 打开活动监视器并search使用您的应用程序名称 运行的进程 。
- 在Activity Monitor中终止这个过程
- 重build你的项目,你应该全部设置
我有同样的问题,并通过以下解决它
- 从设备上删除应用程序,
- 从Mac断开设备,
- closures设备并重新打开,
- 退出并重新启动Xcode,
- 戒烟仪器,
- 最后,再次清理和构build。
我也做了一件事,因为Xcode被configuration为使用iOS 5.0,我的项目使用iOS 4.3
- 删除所有框架并再次添加它们。
备用解决方法:
- 给你的应用一个新的标识符。 如果它叫做com.foobar.myapp,则称它为com.foobar.myapp01
你失去了应用程序中的所有数据,因为它实际上是一个运行iPhone模拟器的新应用程序。 这可能会或可能不会比重新启动更烦人 – 只是想把它添加到列表中。
原因
在之前运行的应用完全停止之前,在模拟器中运行您的应用。
修正
等到看到“停止”button再次运行之前再次激活。
(我正在使用Xcode 4.2.1。当我升级到OS X Lion时,这个问题经常发生)。
修复通过删除应用程序重新启动我的手机,然后重build它干净,再次运行。 现在工作正常。
奇怪的。
没有重build或重新安装需要我的问题,在我的情况下,当试图在iPhone上运行的应用程序出现错误。 模拟器工作正常。
解决scheme:closures手机应用程序,冷启动手机,现在一切正常。
在Lion上使用Xcode 4.2.1发生了很多事情。 更新到4.3.2,它不再发生。 很高兴他们修好了。
迈克·阿什张贴了一个解决scheme (上帝保佑他!),不需要重新启动。 赶紧跑:
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
上面的命令列出了所有启动的作业,在名称中search一个带有UIKitApplication的作业(这将是与您的应用程序相对应的工作不适当的工作),提取名称,并告诉launchd摆脱那个工作。
我认为这是由于在按Xcode中的停止button之前强制退出iPhone上的应用程序所致。 有时当你在Xcode中按下停止button时,如果挂起的话,需要额外的时间来退出应用程序。 但只要有耐心,最终会退出大部分时间。
您可以在函数或选项卡中分配variables。 如果你的函数或标签退出,它将会释放。 所以你必须声明它的成员variables或全局variables。
我一直得到这个错误,直到我停止信任运行对话框中的“停止”button。 现在我总是在试图运行之前在工具栏中停止,我还没有遇到任何僵尸进程。
噢,我 – 我尝试了上面列出的所有东西和其他职位。 重新安装Xcode,重新启动我的机器,将所有丢失的文件复制到正确的文件夹…最后,我备份了我的iPhone,擦干净,并恢复它,它的工作!
我认为可能是因为阅读这本书而导致的结果是,我的iPhone手机正在运行,性能工具发现泄漏。 还是一些这样的事情。
啊,大大的松了一口气。
在最糟糕的情况下, 重置 iOS Simulater的内容和设置 ,在我的情况下,大部分时间,随着模拟器退出XCode,总是工作与我XCode4.6(经常被绞死)
我曾经遇到过这样的问题,就是我所做的
- 从模拟器中删除应用程序。
- 删除派生的数据文件夹。
- 通过select产品菜单在项目中执行清理操作 – 清理
- 重置模拟器。
- 退出Xcode。
- 现在尝试运行项目,如果其工作正常,否则转到步骤7
- 重复从1到5的所有步骤,然后重新启动机器。
在大多数情况下,我得到它运行在第6步极端情况下,我不得不重新启动我的机器。
此错误以前在iOS模拟器的旧版本中出现,因为正在closures的另一个设备中较早的作业实例可能会与新实例发生冲突。
iOS 6.0和更高版本不应该遇到这样的问题,因为iOS 6.0引入了引导子集的使用,iOS 7.0引入了与主机引导服务器完全隔离的专用引导服务器(launchd_sim)的使用。