每次停止模拟器后,Xcode 4.2都跳转到main.m

这更是一个普遍的烦恼。 每次停止模拟器后,由于某种原因,Xcode跳转到main.m。 在左侧的导航栏中,它跳转到debugging导航器。

有没有办法来解决这个问题?

这很烦人,因为我可能正在testing某一行代码,现在每次我都需要点击几下鼠标才能返回到该代码。

这个问题并不新鲜,但似乎越来越糟糕。 在写这篇文章的时候,我是在转基因种子上,但是这个问题在XCode 4.2的最终版本中依然存在。 这在以前版本的XCode中不是问题。

当我们从xcode开始debugging的时候,debugging器将自己设置为监视来自操作系统的信号。 当我们按下XCode中的停止button时(或者打到cmd + R – 先停止现有的实例运行,然后尝试启动新的实例,有点象我们按手动停止然后运行) SIGKILL被发送到debugging器

每当中断的原因是来自应用程序之外(换句话说,发送SIGKILL的所有情况,如停止button按下),debugging器跳转到main ,因为main是应用程序的根和应用程序符合OS的地方 。 debugging器没有办法确定为什么这个SIGKILL发出(按xcode停止button/按cmd + R /从多任务栏删除应用程序等),但它把SIGKILL作为外部中断,并没有任何与您的代码相关 。 所以它跳转到主要。

如果中断的原因是从应用程序内部(如应用程序崩溃/ SIGABRT)debugging程序处理它,并跳转到崩溃的地方,我们通常会看到。

我不认为这是一个Xcode错误,而是一个处理SIGKILL的正常方式。 但如果你想留在你的代码,不想跳转到主,你可以做两件事情

  1. 你可以像Gabebuild议的那样做。 BBonified说,它就像一个乐队助手,但我认为它应该工作(我个人从未尝试过)

  2. 在这里报告一个function的错误/请求。 让我告诉你,你不是第一个这样做。 已经有一个错误报告。 看到这个和这个 。 但是我对苹果的积极行动没有太大的希望

我同意你的看法,有时候很烦人。 特别是如果你在之前的XCode版本中经历过不同的情况。 但是我们只能把这里给他们的东西拿走。

我认为把它称为一个bug是公平的,Xcode 3明确地压制了这个无用的人造物。

~/.gdbinit我已经成功(四次~/.gdbinit

 handle SIGKILL nostop noprint nopass 

采取从这个gdb手册:

http://www.delorie.com/gnu/docs/gdb/gdb_39.html

不知道它是否也适用于lldb。

我尝试了David的build议,但这对我并不起作用,所以我尝试了类似的方法:

  1. 打开首选项,select行为选项卡。
  2. 从左列select“意外退出”。
  3. select“显示当前视图的debugging器”。

我正在使用Xcode版本4.2 build 4D199。

编辑 :这工作了大约15分钟。 然后又重新在编辑器中提出main.m。

我有同样的问题,真的很烦人,尤其是当你在debugging中,经过小小的修改,连续几次停止/启动应用程序。

一切都可以通过Xcode用户偏好设置来解决:

  • 只要去“运行完成”
  • find“显示”行并点击checkbox
  • 在同一行修改目标,在下拉菜单中select“当前”。

你走了 从现在开始,Xcode不会移动您的编辑视图。 请享用。

PS:Xcode版本4.2 Build 4C199

转到首选项 – >行为。 select左侧的“运行完成”。 选中“显示选项卡”旁边的框并input选项卡名称。 我使用“编辑”。 这样,每当你停下来,你总是会回到一个名为Edit的选项卡。

没有列出的其他解决scheme适合我,所以我做了一个macros(使用外部热键实用程序)。

(每一步之后等待0.1秒)

命令期间

命令1

向下箭头

向上箭头

命令-J

input

使用这个键而不是正常的停止,你最终将光标放在你离开它的地方。 非常好。

Xcode – >首选项

在行为下

点击运行开始

[显示]debugging器的checkbox和[当前视图]

…为我工作。

这些偏好调整似乎没有为我工作。

我已经能够跟踪违规事件的顺序。 运行应用程序并使用多个线程时,会出现SIGKILL错误消息。 例如,当在我的应用程序中使用UIWebView时,它将中止到main.m. 我证实,当UIWebView没有被调用,XCode可以停止没有SIGKILL错误消息返回到main.m用户

看起来至less有两个线程在初始化UIWebView时开始。 但是,在您的应用程序运行期间由您创build的任何线程将导致SIGKILL不正确地通知XCODE返回到主。

您可以在GDB中看到,在SIGKILL之前有一个开关:

[切换到进程24957线程0x2103]

[切换到进程24957线程0x7403]

[切换到进程24957线程0x207]

程序以退出码:0结束

这绝对是一个XCODE的错误,希望能得到解决。

现在,如果您避免执行启动单独线程的代码,它将不会将视图更改回main.m对于启动其他线程的代码,我build议退出模拟器以返回到XCODE中的编辑模式。

这些解决scheme都没有为我工作,我觉得这种行为过于干涉,不能忍受。

我通过使用“助理编辑器”而不是编辑器来作为我的主要编辑窗口。 您可以使用单个窗口右上angular的小领结button访问“助理编辑器”。

您可以将其设置为“手动”。 单击“助手编辑器”框顶部的面包屑path最左面碎屑的button,然后从popup菜单中select“手动”。 “手动”设置允许您通过单击面包屑path的倒数第二个面包屑并从popup窗口中select文件来select要编辑的文件。

然后我只是最小化主编辑器的大小 – 或将其用作辅助编辑窗口,因为您无法将编辑器分割成多个帧。 远非理想 – 但这就是XCode 4。

这可能不多。 停止应用程序后等待2秒钟左右,我可以在99%的时间内避免这个问题,然后重新启动。

更新 :升级到最新的Xcode后,我被提示使用LLDB而不是GDB。 这个问题似乎已经消失了。

当我的代码被破坏时,我试图find违规的行,所以我做的是:

  1. 转到您定义断点的位置(根据文档,断点导航器)
  2. 点击导航区域左下angular的“+”号
  3. 点击添加exception断点
  4. 你点击完成
  5. 运行你的应用程序

Xcode显示你的违规行。