370

当单击 UIAlertView 的按钮时崩溃时,我正在模拟器上测试我的应用程序。我在那里停止了调试,对代码进行了一些更改并再次构建了应用程序。现在,当我运行应用程序时,我在控制台中收到此错误

无法向引导服务器注册 com.myApp.debug。错误:未知错误代码。这通常意味着该进程的另一个实例已经在运行或挂在调试器中。程序收到信号:“SIGABRT”。

我尝试从模拟器中删除该应用程序,进行干净的构建,但当我尝试运行该应用程序时仍然出现此错误。

我应该怎么做才能再次在我的模拟器上运行该应用程序?

4

31 回答 31

242

状态:最近出现在 Mac OS 10.8 和 Xcode 4.4 中。

tl; dr:这可能发生在两种情况下:在设备上运行时和在模拟器上运行时。在设备上运行时,断开并重新连接设备似乎可以解决问题。

迈克·阿什建议

launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove

这并不总是有效。事实上,它从未对我有用,但在某些情况下它显然有效。就是不知道是什么情况。所以值得一试。

否则,解决此问题的唯一已知方法是重新启动用户启动。重新启动会做到这一点,但有一种不那么激烈/更快的方法。您需要创建另一个管理员用户,但您只需执行一次。当事情发生变化时,以您自己的身份注销,以该用户身份登录,然后杀死属于您的主要用户的 launchd,例如,

sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`

将您的主要用户名替换为user_id. 以您的普通用户身份再次登录会让您恢复正常状态。有点痛苦,但不如完全重启。

细节:

Lion/Xcode 4.2 开始更频繁地发生这种情况。(就我个人而言,在那个组合之前我从未见过它。)

该错误似乎在launchd中,当调试器停止调试而不杀死它时,它继承了应用程序进程作为子进程。这通常由应用程序变为僵尸发出信号,进程状态为 Z in ps。

核心问题似乎出在在 launchd 中实现的引导名称服务器中。这(据我了解)将应用程序 ID 映射到马赫端口。当错误被触发时,应用程序会死掉,但不会从引导服务器的名称服务器映射中清除,因此引导服务器拒绝允许应用程序的另一个实例以相同的名称注册。

希望(请参阅评论)强制启动wait()僵尸可以解决问题,但事实并非如此。核心问题不是僵尸状态(这就是为什么一些僵尸是良性的),而是引导名称服务器,并且没有已知的方法可以清除这个短于杀死 launchd 的问题。

看起来这个 bug 是由 Xcode、gdb 和用户 launchd 之间的错误触发的。我只是通过在 iphone 模拟器中运行一个应用程序来重复楔子,让它在 gdb 中停止,然后进行构建并运行到 ipad 模拟器。它似乎对切换模拟器很敏感(iOS 4.3/iOS 5、iPad/iPhone)。当我经常切换模拟器时,它不会一直发生,但相当频繁。

在您登录时杀死 launchd 会搞砸您的会话。注销并重新登录不会杀死用户launchd;OS X 保留现有的进程。重新启动会解决问题,但这很痛苦。上面的说明更快。

我已经向 Apple FWIW 提交了一个错误。rdar://10330930

于 2011-10-22T16:14:46.327 回答
162

尝试退出并重新启动模拟器?如果“情况更糟”,您可以随时尝试重新启动:根据我的经验,这应该可以解决它。

于 2009-04-25T05:21:47.737 回答
70

我发现我已经开始遇到 Lion + Xcode 4.2 的这个问题。我在 Xcode 4.3 中也遇到过这个问题。

我已经尝试了所有建议,但除了完全重新启动之外,它们都没有奏效。

以下是您确定是否需要快速重启的方法。

列出你所有的僵尸进程:

ps -el | grep 'Z'

如果您看到您的应用程序列为僵尸进程,则需要重新启动计算机。错误消息指出“这通常意味着该进程的另一个实例已经在运行或挂在调试器中”。好吧,Xcode 正在检测这个你无法杀死的僵尸进程。然后,您可以修复它的唯一方法是重新启动系统。:(

编辑,20120823:我对僵尸进程有一些更好的了解,所以我想更新这个答案。当父进程未在终止的子进程上调用 wait()(等待进程更改状态)时,将创建 Zombie 进程。您不能直接在 Zombie 进程上运行“kill”,但如果您杀死父进程,则 Zombie 子进程将被“收割”并从进程表中删除。

我很长一段时间没有看到这个问题,所以没有检查过这个场景中的父进程是什么。杀死父进程的替代方法是重新启动系统。:)

于 2011-11-12T12:19:01.550 回答
20

我刚刚遇到这种情况:我只在我的设备上收到错误,模拟器工作正常。我最终不得不重置我的设备并且错误消失了。

于 2010-07-21T00:46:56.040 回答
15

我最近经常遇到这个问题。什么可以防止这种情况发生?注销并解决问题但是..经常这样做很烦人。

编辑:

我刚刚找到原因。我在 ApplicationWillTerminate 方法中有一个错误。因此,当我单击 Xcode 窗口上的停止按钮时,应用程序无法正确终止并开始挂起。

检查活动监视器以查看您的应用程序是否在列表中。如果可能,强制退出。

于 2009-08-07T18:30:48.407 回答
14

如果您发现问题是由于僵尸进程引起的:

ps-el | grep 'Z'
(如之前的评论https://stackoverflow.com/a/8104400/464289)并且只想立即解决问题,您可以这样做而无需重新启动或杀死任何东西。只需重命名您的项目目标可执行文件:

  1. 单击左侧窗格中的项目
  2. 在中间窗格中选择构建设置
  3. 在“包装”下,将“产品名称”从$(TARGET_NAME) 更改为 $(TARGET_NAME).1

简单的!

于 2012-03-21T00:42:58.327 回答
7

好吧,没有答案,但至少还有一个测试要做。打开终端并运行以下命令:“ps-Ael | grep Z”。如果您收到两个条目,一个是“(clang)”,另一个是您的应用程序或公司名称,那么您将被淹没 - 重新启动。

如果您是开发人员,请输入一个简短的错误并告诉 Apple 必须重新启动是多么烦人,并提及他们可以将此错误复制到我刚刚输入的“rdar://10401934”。

大卫

于 2011-11-05T14:45:24.113 回答
5

重置 iOS 模拟器为我修复了错误。尽管这将删除您在模拟器中拥有的所有应用程序,但它可以解决问题而无需重新启动机器。

您可以通过执行以下操作重置您的 iOS 模拟器:

1) 转到主屏幕最左侧 Apple () 徽标旁边的“iOS 模拟器”菜单。
2) 选择“重置内容和设置...”。
3) 阅读弹出消息,如果您同意点击“重置”,否则点击“不重置”。

于 2011-04-13T20:31:47.623 回答
5
  1. 关闭模拟器
  2. 停止应用程序在 xCode 中运行。
  3. 打开Activity Monitor并搜索使用您的App NAME运行的进程
  4. 在活动监视器中终止此进程
  5. 重建你的项目,你应该准备好了
于 2011-11-29T17:57:35.993 回答
4

我遇到了@jyap 提到的僵尸进程的问题。清除它们的唯一方法是重新启动。但是,我注意到我在同一个项目上工作的朋友会遇到同样的问题,但可以在不创建僵尸进程的情况下杀死模拟器。我完全卸载了 Xcode 并重新安装了它,虽然我仍然收到错误,但它不会创建僵尸进程,所以我不必重新启动。

在我这样做之前,我使用了这个非常丑陋的解决方法:更改您的应用程序 ID 并再次运行。您最终会在模拟器中获得应用程序的垃圾副本,但您可以推迟重新启动一段时间。

于 2011-11-10T00:39:08.060 回答
4

这个错误经常发生在我身上,几乎每次我在模拟器中测试应用程序时,都会迫使我重新启动。

如果您想完成一些工作,这里有一个解决方法:

  • 在项目导航器中单击您的项目
  • 前往目标->信息
  • 为应用程序添加密钥不在后台运行并设置为YES.

这意味着当您在模拟器中按下主页按钮或退出模拟器时,应用程序不会挂起。

不要忘记在分发之前更改此设置!把它放在你的发布清单上:)

于 2012-01-10T11:16:07.713 回答
4

如果在 iPhone 上测试时发生这种情况。重启手机就好了。据我所知,手机或模拟器仍然认为有一个应用程序正在运行,所以当它最后一次运行时,它没有正确终止,要么是代码中的错误,要么是手机/模拟器只是想要一个呻吟。

于 2012-02-28T08:43:57.187 回答
4

在 iPhone 4 上调试我的应用程序时出现此错误。硬重启 iPhone 解决了我的问题。(关闭iPhone的电源挂了...)

我的 mac 上没有任何僵尸进程,重新启动 mac 并没有解决问题。

也许这个错误可以在模拟器和实际设备上表现出来???

于 2012-03-12T02:24:28.010 回答
4

重启设备,成功!:D

谢谢大家的好建议。

于 2012-10-27T19:13:48.947 回答
3

我刚遇到这个错误。我尝试重新启动模拟器和 Xcode,但我的项目只有在清理和构建后才能再次运行。不知道是什么原因造成的。

于 2010-12-17T15:57:56.763 回答
3

我有一个递归设置器,它吹过堆栈并杀死了我的应用程序,以至于我不得不启动我的 iPad。可以通过代码中的修复来证明这一点。

于 2011-08-19T22:43:46.890 回答
3

我有同样的问题并通过执行以下操作解决了

  • 从设备中删除应用程序,
  • 断开设备与 Mac 的连接,
  • 关闭并重新打开设备,
  • 退出并重新启动 Xcode,
  • 戒烟工具,
  • 最后,再次清理并构建。

我还做了一件事,因为 Xcode 被配置为使用 iOS 5.0 而我的项目使用的是 iOS 4.3

  • 删除所有框架并再次添加它们。
于 2011-10-17T12:06:12.197 回答
3

原因

在之前运行的应用程序完全停止之前在模拟器中运行您的应用程序。

修复

等到您看到停止按钮再次激活,然后再运行。

(我使用的是 Xcode 4.2.1。当我升级到 OS X Lion 时,这个问题经常发生)。

于 2012-02-03T20:02:41.120 回答
3

替代解决方法:

  • 给你的应用一个新的标识符。如果它叫 com.foobar.myapp,就叫它 com.foobar.myapp01

您会丢失应用程序中的所有数据,因为就 iPhone 模拟器而言,它实际上是一个正在运行的新应用程序。这可能会也可能不会比重新启动更烦人 - 只是想将其添加到列表中。

于 2012-02-07T15:08:42.180 回答
2

通过在删除应用程序后重新启动我的手机,然后将其重建干净并再次运行来修复。现在工作正常。

奇怪的。

于 2011-07-06T09:03:46.153 回答
2

我的问题不需要重建或重新安装,在我的情况下,尝试在 iPhone 上运行应用程序时出现错误。模拟器工作正常。

解决方法:删除手机应用程序,冷重启手机,现在一切正常。

于 2012-01-16T02:05:32.257 回答
2

在 Lion 上使用 Xcode 4.2.1 对我来说发生了很多事情。更新到 4.3.2,它不再发生。很高兴他们修好了。

于 2012-05-02T23:02:56.750 回答
2

Mike Ash发布了一个不需要重启的解决方案(上帝保佑他!)。赶紧跑:

launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove

上面的命令列出了所有已启动的作业,搜索名称中带有 UIKitApplication 的作业(这将是与您的应用程序相对应的作业),提取名称,并告诉 launchd 摆脱该作业。

于 2012-05-07T21:19:45.340 回答
2

我认为这是由于在按下 Xcode 中的停止按钮之前在 iPhone 上强制退出您的应用程序造成的。有时,当您在 Xcode 中按下停止按钮时,如果应用程序挂起,则需要额外的时间才能退出应用程序。但是请耐心等待,它最终会在大多数情况下退出。

于 2012-06-10T01:35:40.820 回答
1

您可以在函数或选项卡中分配变量。如果您的函数或选项卡退出,它将解除分配。所以你必须声明它的成员变量或全局变量。

于 2011-09-07T02:27:07.703 回答
1

我一直收到这个错误,直到我不再信任“运行”对话框中的“停止”按钮。现在我总是在尝试运行之前在工具栏中点击停止,我还没有遇到任何僵尸进程。

于 2012-01-29T06:49:00.243 回答
0

哦,我的 - 我尝试了上面和其他帖子中列出的所有内容。重新安装 Xcode,重新启动我的机器,将所有丢失的文件复制到正确的文件夹中......最终我备份了我的 iphone,擦除并恢复它,它工作了!

我认为阅读和解决此问题的原因可能是断开了我的 iphone white 的连接,它正在使用捕获泄漏的性能工具运行。或者类似的东西。

啊啊啊,大大的松了一口气。

于 2011-02-09T18:22:17.650 回答
0

在最坏的情况下,重置iOS 模拟器的内容和设置,在我的情况下,大多数时候,与模拟器一起退出 XCode,总是对我有用 XCode4.6(经常被挂起)

于 2013-02-22T14:55:23.380 回答
0

在我的情况下,我曾经遇到过这种问题,这就是我所做的

  1. 从模拟器中删除应用程序。
  2. 删除派生数据文件夹。
  3. 通过选择产品菜单 - clean 在项目中执行清理操作
  4. 重置模拟器。
  5. 退出 Xcode。
  6. 如果项目工作正常,请立即尝试运行该项目,否则转到第 7 步
  7. 重复从 1 到 5 的所有步骤,然后重新启动机器。

在大多数情况下,我让它在第 6 步极端情况下运行,我不得不重新启动我的机器。

于 2014-02-21T11:53:56.947 回答
0

这个错误曾经发生在旧版本的 iOS 模拟器中,因为另一个正在关闭的设备中的旧作业实例可能会与新实例发生冲突。

iOS 6.0 及更高版本不应遇到此类问题,因为 iOS 6.0 引入了引导子集的使用,而 iOS 7.0 引入了与主机引导服务器完全隔离的专用引导服务器 (launchd_sim) 的使用。

于 2014-12-29T02:35:42.047 回答
0

如果您正在从命令行运行测试(使用xcodebuild test),请确保正在运行的模拟器与您希望在其上运行测试的设备匹配。

您可能正在运行使用 iPhone 5 的命令行测试。如果您一直在 XCode 广告中运行 iPhone 6 然后运行命令行测试,有时 iPhone 6 将保持运行,您需要手动选择 iPhone 5 设备,然后运行再次测试。

于 2015-02-21T15:14:32.937 回答