每次停止模拟器后,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的正常方式。 但如果你想留在你的代码,不想跳转到主,你可以做两件事情
-
你可以像Gabebuild议的那样做。 BBonified说,它就像一个乐队助手,但我认为它应该工作(我个人从未尝试过)
-
在这里报告一个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议,但这对我并不起作用,所以我尝试了类似的方法:
- 打开首选项,select行为选项卡。
- 从左列select“意外退出”。
- 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违规的行,所以我做的是:
- 转到您定义断点的位置(根据文档,断点导航器)
- 点击导航区域左下angular的“+”号
- 点击添加exception断点
- 你点击完成
- 运行你的应用程序
Xcode显示你的违规行。