当我在点击UIAlertView的按钮时崩溃时,我正在模拟器上测试我的应用程序.我在那里停止调试,对代码进行了一些更改并再次构建了应用程序.现在,当我运行应用程序时,我在控制台中收到此错误
无法在引导服务器上注册com.myApp.debug.错误:未知的错误代码.这通常意味着此进程的另一个实例已在运行或挂在调试器中.程序接收信号:"SIGABRT".
我尝试从模拟器中删除应用程序,进行干净的构建,但是当我尝试运行应用程序时仍然出现此错误.
我该怎么做才能再次在我的模拟器上运行应用程序?
状态:最近被视为Mac OS 10.8和Xcode 4.4.
tl; dr:这可能发生在两个上下文中:在设备上运行时和在模拟器上运行时.在设备上运行时,断开连接并重新连接设备似乎可以解决问题.
迈克阿什建议道
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
这不会一直有效.事实上,它从来没有对我有用,但它在某些情况下显然有效.只是不知道哪些情况.所以值得一试.
否则,解决此问题的唯一已知方法是重新启动用户launchd.重新启动会做到这一点,但有一个不那么激烈/更快的方式.您需要创建另一个管理员用户,但您只需要执行一次.当事物楔入时,以自己的身份注销,以该用户身份登录,并终止属于您的主要用户的launchd,例如,
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
用你的主要用户名代替user_id
.当您的普通用户让您恢复到理智的状态时再次登录.有点痛苦,但不如完全重启.
细节:
Lion/Xcode 4.2已经开始更频繁地发生这种情况.(就个人而言,我之前从未见过它.)
该错误似乎是在launchd中,当调试器停止调试它而不杀死它时,它继承了作为子进程的应用程序进程.这通常由应用程序变为僵尸发出信号,具有以ps为单位的过程状态Z.
核心问题似乎是在launchd中实现的引导名称服务器中.这(在我理解的范围内)将app id映射到mach端口.当触发错误时,应用程序会死,但不会从引导服务器的名称服务器映射中清除,因此,引导服务器拒绝允许以相同名称注册该应用程序的另一个实例.
希望(见评论)强制推出wait()
僵尸会解决问题,但事实并非如此.这不是僵尸状态是核心问题(这就是为什么有些僵尸是良性的)但是引导名称服务器并没有已知的方法可以清除这种杀死launchd的缺点.
看起来这个错误是由Xcode,gdb和用户启动之间的错误引发的.我只是通过在iphone模拟器中运行一个应用程序重复楔子,让它在gdb中停止,然后进行构建并运行到ipad模拟器.它似乎对切换模拟器(iOS 4.3/iOS 5,iPad/iPhone)很敏感.它不是一直发生的,而是在我经常切换模拟器的时候经常发生的.
在您登录时启动杀戮将会破坏您的会话.注销并重新登录并不会导致用户启动; OS X保持现有流程.重启将解决问题,但这很痛苦.上面的说明更快.
我已向Apple,FWIW提交了一个错误.rdar:// 10330930
尝试退出并重新启动模拟器?如果"情况变得更糟",您可以尝试重新启动:根据我的经验,这应该解决它.
我发现我已经开始使用Lion + Xcode 4.2.我也遇到过Xcode 4.3中的问题.
我已经尝试了所有的建议,但除了完全重启之外没有其他任何工作.
以下是确定是否需要快速重启的方法.
列出你所有的Zombie进程:
ps -el | grep 'Z'
如果您将应用程序列为Zombie进程,则需要重新启动计算机.错误消息指出"这通常意味着此进程的另一个实例已在运行或挂起在调试器中".好吧,Xcode正在检测你无法杀死的僵尸进程.您可以修复它的唯一方法是重启系统.:(
EDIT,20120823:我对Zombie进程有了更深入的了解,所以我想更新这个答案.当父进程未在终止子进程上调用wait()(等待进程更改状态)时,将创建Zombie进程.您不能直接在Zombie进程上运行'kill',但是如果您终止了父进程,僵尸子进程将被"收集"并从进程表中删除.
我很久没有看到这个问题所以没有检查过这个场景中的父进程是什么.杀死父进程的替代方法是重启系统.:)
我刚刚遇到这种情况:我只是在我的设备上得到错误,模拟器工作正常.我最终不得不重置我的设备,错误消失了.
我最近经常遇到这个问题.什么会阻止这种情况发生?注销并修复问题,但是每隔一段时间这样做很烦人.
编辑:
我找到了原因.我在ApplicationWillTerminate方法中有一个错误.因此,当我点击Xcode窗口上的停止按钮时,应用程序无法正常终止并开始挂起.
检查活动监视器以查看您的应用程序是否在列表中.如果可能的话,强制戒掉.
如果您发现问题是由僵尸进程引起的:
ps -el | grep 'Z'(如在之前的评论/sf/ask/17360801/中)并且只想立即解决问题,您可以在不重新启动或查杀任何内容的情况下执行此操作.只需重命名项目目标可执行文件:
单击左侧窗格中的项目
在中间窗格中选择" 构建设置"
在" 打包 "下,将" 产品名称 "从$(TARGET_NAME)更改为$(TARGET_NAME).1
简单!
好吧,没有答案,但至少还有一个测试要做.打开终端并运行此命令:"ps-Ael | grep Z".如果你得到两个条目,一个是"(clang)"而另一个是你的应用程序或公司名称,那么你就会被重新启动.
如果您是开发人员,请输入一个简短的错误并告诉Apple,重启是多么令人讨厌,并提及他们可以将此错误复制到我刚刚输入的"rdar:// 10401934".
大卫
重置iOS模拟器为我修复了错误.虽然这将删除您在模拟器中的所有应用程序,但它可以解决问题,而无需重新启动计算机.
您可以通过执行以下操作重置iOS模拟器:
1)转到主屏幕最左侧Apple()徽标旁边的"iOS模拟器"菜单.
2)选择"重置内容和设置...".
3)阅读弹出消息,如果同意,请单击"重置",否则单击"不重置".