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

时间:2011-10-07 01:40:20

标签: ios xcode

这更令人烦恼。每次停止模拟器后,Xcode都会因为某些原因跳转到main.m.在左侧导航栏中,它会跳转到Debug Navigator。

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

这很烦人,因为我可能正在测试某一行代码,现在每次,我都需要点击几下才能回到那段代码。

这个问题并不新鲜,但似乎变得更糟。在撰写本文时,我是转基因种子,但这个问题在XCode 4.2 final中仍然存在。这在以前版本的XCode中不是问题。

11 个答案:

答案 0 :(得分:15)

当我们从xcode开始调试时,调试器将自己设置为监视来自OS的信号。当我们按下XCode中的停止按钮(或点击cmd + R - 它首先停止现有实例运行然后尝试启动新实例时,我们先按手动停止然后再运行) SIGKILL被发送到调试器< / strong>即可。

每当中断的原因来自应用程序外部(换句话说,发送SIGKILL的所有情况,如停止按下按钮),调试器会跳转到main,因为 main是应用程序的根目录以及您的应用符合操作系统的地方。调试器无法识别为什么发出此SIGKILL(按xcode中的停止按钮/从多任务栏中按cmd + R /删除应用程序等),但它将SIGKILL视为外部中断,并且与您的代码无关。所以它跳到主要。

如果中断的原因来自app内部(如app crash / SIGABRT),调试器会处理它并跳转到崩溃的地方,我们通常会看到它。

我不认为这是一个xcode错误,而是一种处理SIGKILL的常规方法。但是如果你想留在你的代码中并且不想跳到main那么你可以做两件事

  1. 你可以像Gabe建议的那样做。正如BBonified所说,它就像一个乐队助手, 但我认为它应该有用(我个人从未尝试过)

  2. 报告功能here的错误/请求。我告诉你 不是第一个这样做的人。已经报告了一个错误。看到 thisthis。但我对Apple的积极行动没有多大希望

  3. 我同意你的意见,有时很烦人。特别是如果您在之前的XCode版本中遇到过不同的体验。但我们只能拿走他们在这里给出的东西。

答案 1 :(得分:11)

我认为把它称为bug是公平的,Xcode 3专门压制了这个无用的人工制品。

我在~/.gdbinit中使用这个单线程获得了成功(四次计算):

handle SIGKILL nostop noprint nopass

取自此gdb手册:

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

不确定它是否也适用于lldb。

答案 2 :(得分:7)

我尝试了大卫的建议,但这对我不起作用,所以我尝试了类似的东西:

  1. 打开“偏好设置”,选择“行为”选项卡。
  2. 从左栏选择“意外退出”。
  3. 选择“使用当前视图显示调试器”。
  4. 我正在使用Xcode版本4.2 build 4D199。

    编辑:大约15分钟。然后它再次在编辑器中重新启动main.m。

答案 3 :(得分:6)

我遇到了同样的问题而且它真的很烦人,尤其是当你处于调试阶段,经过小幅修改后连续几次停止/启动应用程序。

通过Xcode用户首选项中的设置可以解决所有问题:

  • 只需转到“运行完成”
  • 找到“显示”行并单击复选框
  • 在同一行修改目标,转到下拉菜单中的“当前”。

你去吧。从现在开始,Xcode不会移动您的编辑视图。享受。

PS:Xcode版本4.2 Build 4C199

答案 4 :(得分:1)

转到首选项 - &gt;行为。选择左侧的“运行完成”。选中“显示标签”旁边的框,然后输入标签名称。我用“编辑”。这样,无论何时停止,您都将返回名为“编辑”的选项卡。

答案 5 :(得分:1)

列出的所有其他解决方案都不适合我,所以我制作了一个宏(使用外部热键实用程序)。

(每步后等待0.1秒)

命令期

命令-1

向下箭头

向上箭头

命令-J

输入

使用此键代替正常停止,最后将光标放在离开它的位置。很好。

答案 6 :(得分:1)

Xcode - &gt;首

在行为下

单击“运行开始”

使用[当前视图]

为[Show]调试器复选框

......为我工作。

答案 7 :(得分:1)

所有偏好调整似乎都不适合我。

我已经能够跟踪有问题的事件序列。运行应用程序并使用多个线程时,将出现SIGKILL错误消息。例如,在我的应用程序中使用UIWebView时,它将中止到main.m.我验证了当没有调用UIWebView时,可以在没有SIGKILL错误消息的情况下停止XCode,将用户返回到main.m

在初始化UIWebView时,似乎至少有两个线程可以启动。 但是,在您运行应用程序期间由您创建的任何线程都将导致SIGKILL不正确地通知XCODE返回主体。

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

  

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

     

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

     

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

     

程序以退出代码结束:0

这绝对是XCODE的一个错误,希望能够修复。

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

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

这些解决方案都不适合我,我发现这种行为过于干扰了。

我通过使用“辅助编辑器”而不是编辑器作为我的主编辑窗口来绕过它。您可以使用单个窗口右上角的小蝴蝶结按钮访问“助理编辑器”。

您可以将其设置为“手动”。单击“助理编辑器”框架顶部的痕迹路径最左侧碎屑按钮,然后从出现的弹出菜单中选择“手动”。手动设置允许您通过单击面包屑路径的倒数第二个碎屑并从出现的弹出窗口中选择文件来选择您正在编辑的文件。

然后我只是最小化主编辑器的大小 - 或者将其用作辅助编辑窗口,因为您无法再将编辑器拆分为多个框架,所以非常有用。远非理想 - 但那是你的XCode 4。

答案 10 :(得分:0)

当我的代码破坏时,我试图找到有问题的行,所以我做的是:

  1. 转到您定义断点的位置(断点导航器,根据文档)
  2. 单击导航区域左下角的“+”符号
  3. 点击添加例外断点
  4. 您点击完成
  5. 运行您的应用
  6. Xcode会显示有问题的行。