Xcode 6.1和6.1.1在调试器断点(模拟器)上崩溃

12

像许多人一样,我也遇到了Xcode 6+崩溃的问题。 我遇到了SourceKit和整个应用程序的崩溃。 突发奇想,我决定尝试6.1.1(开发人员成员中心),但结果更糟,调试器断点现在导致整个应用程序崩溃。所以我说算了,回到6.1,但是我仍然在放置调试器断点时遇到崩溃。

显然,此断点崩溃仅影响模拟器,设置物理设备并停止在断点处没有问题。 奇怪!

这绝对让人抓狂!还有人遇到这种情况吗?

我尝试过的事情:

  • 删除/Application/Xcode.app/和~/Library/Developer/*
  • 清理项目
  • 重启我的笔记本电脑
  • 在物理设备上执行断点(<<<<====== 这个可以工作!!!)
  • 屠杀一只鸡并将其血液弥漫在周围

栈跟踪的头部:

Process:         Xcode [7904]
Path:            /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier:      com.apple.dt.Xcode
Version:         6.1 (6604)
Build Info:      IDEFrameworks-6604000000000000~2
App Item ID:     497799835
App External ID: 752282650
Code Type:       X86-64 (Native)
Parent Process:  launchd [185]
Responsible:     Xcode [7904]
User ID:         501

Date/Time:       2014-11-25 12:32:49.348 -0800
OS Version:      Mac OS X 10.9.5 (13F34)
Report Version:  11
Anonymous UUID:  E22980F9-B80B-F985-200A-FE471C623C56


Crashed Thread:  23  <DBGLLDBSessionThread (pid=7957)>

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000001409bdfd0

VM Regions Near 0x1409bdfd0:
    Stack                  000000014093b000-00000001409bd000 [  520K] rw-/rwx SM=COW  thread 22
--> STACK GUARD            00000001409bd000-00000001409be000 [    4K] ---/rwx SM=NUL  stack guard for thread 23
    Stack                  00000001409be000-0000000140a40000 [  520K] rw-/rwx SM=COW  thread 23

Application Specific Information:
ProductBuildVersion: 6A1052d

...

Thread 23 Crashed:: <DBGLLDBSessionThread (pid=7957)>
0   libsystem_pthread.dylib         0x00007fff90eb82cf __mtx_droplock + 17
1   libsystem_pthread.dylib         0x00007fff90eb88f3 pthread_mutex_unlock + 60
2   com.apple.LLDB.framework        0x000000011808f8be lldb_private::Mutex::Locker::~Locker() + 22
3   com.apple.LLDB.framework        0x00000001180ed55f GDBRemoteCommunication::CheckForPacket(unsigned char const*, unsigned long, StringExtractorGDBRemote&) + 2423
4   com.apple.LLDB.framework        0x00000001180ec99e GDBRemoteCommunication::WaitForPacketWithTimeoutMicroSecondsNoLock(StringExtractorGDBRemote&, unsigned int) + 88
5   com.apple.LLDB.framework        0x00000001181eeb1b GDBRemoteCommunicationClient::SendPacketAndWaitForResponse(char const*, unsigned long, StringExtractorGDBRemote&, bool) + 91
6   com.apple.LLDB.framework        0x00000001180f7574 ProcessGDBRemote::DoReadMemory(unsigned long long, void*, unsigned long, lldb_private::Error&) + 216
7   com.apple.LLDB.framework        0x00000001181a452a lldb_private::Process::ReadMemoryFromInferior(unsigned long long, void*, unsigned long, lldb_private::Error&) + 94
8   com.apple.LLDB.framework        0x0000000118171889 lldb_private::ProcessStructReader::ProcessStructReader(lldb_private::Process*, unsigned long long, lldb_private::ClangASTType) + 561
9   com.apple.LLDB.framework        0x0000000118169082 lldb_private::SwiftLanguageRuntime::ClassMetadata::ClassMetadata(lldb_private::SwiftLanguageRuntime&, unsigned long long) + 354
10  com.apple.LLDB.framework        0x000000011816625d lldb_private::SwiftLanguageRuntime::GetMetadataForLocation(unsigned long long) + 531
11  com.apple.LLDB.framework        0x00000001181690d1 lldb_private::SwiftLanguageRuntime::ClassMetadata::ClassMetadata(lldb_private::SwiftLanguageRuntime&, unsigned long long) + 433
12  com.apple.LLDB.framework        0x000000011816625d lldb_private::SwiftLanguageRuntime::GetMetadataForLocation(unsigned long long) + 531
13  com.apple.LLDB.framework        0x00000001181690d1 lldb_private::SwiftLanguageRuntime::ClassMetadata::ClassMetadata(lldb_private::SwiftLanguageRuntime&, unsigned long long) + 433
14  com.apple.LLDB.framework        0x000000011816625d lldb_private::SwiftLanguageRuntime::GetMetadataForLocation(unsigned long long) + 531
15  com.apple.LLDB.framework        0x00000001181690d1 lldb_private::SwiftLanguageRuntime::ClassMetadata::ClassMetadata(lldb_private::SwiftLanguageRuntime&, unsigned long long) + 433
16  com.apple.LLDB.framework        0x000000011816625d lldb_private::SwiftLanguageRuntime::GetMetadataForLocation(unsigned long long) + 531
17  com.apple.LLDB.framework        0x00000001181690d1 lldb_private::SwiftLanguageRuntime::ClassMetadata::ClassMetadata(lldb_private::SwiftLanguageRuntime&, unsigned long long) + 433
18  com.apple.LLDB.framework        0x000000011816625d lldb_private::SwiftLanguageRuntime::GetMetadataForLocation(unsigned long long) + 531

...


5
屠杀一只鸡并将它的血液涂抹在周围。这确实应该有效。是什么品种的鸡? - matt
1
更加严肃地说,请尝试我的答案:https://dev59.com/cW025IYBdhLWcg3w7qjL#6247073 最后的两个编辑非常重要。Xcode维护一些邪恶的缓存,可能会变得损坏/陈旧,清除它们可以帮助很多。 - matt
好的,回到那只鸡... :( 至少你已经得到了一种解决方法,这样你就可以继续开发了。同时,如果你能将其打包成可重现的案例,那么它显然是一个绝佳的错误报告。Xcode崩溃是不好的。 - matt
1
你是否删除了所有断点,只设置了一个?当然,你应该提交一个 bug。 - theguy
1
我撒谎了,它在手机上崩溃了。这是一个非常特定的断点,导致Xcode 6.1和6.1.1都崩溃。啊啊啊啊啊啊! - BK-
显示剩余7条评论
1个回答

11
多年来,已经提出了很多解决这种奇怪的Xcode行为的解决方案,因此我也将包括所有这些步骤; 然而,我添加了一些自己的步骤(一起按顺序完成),这些步骤从未未能解决我遇到的任何怪异的Xcode问题。请注意:按照顺序执行所有这些步骤非常重要。我知道乍一看有些步骤似乎过度或者不应该有影响,但我的经验表明每个步骤都在让Xcode回到正常工作状态中扮演了一定角色。因此,我不建议跳过任何步骤或更改它们的顺序。话虽如此,如果您发现需要微调下面的步骤,请发表评论。Xcode不断变化,因此随着时间的推移,这些步骤也可能需要更改。
在Xcode崩溃后:
  1. 如果模拟器仍在运行,请确保在关闭之前选择IOS Simulator->Reset Content And Settings。
  2. 关闭模拟器 (CMD-Q)
  3. Window -> Organizer -> Delete derived data
  4. 如果在任何设备上进行调试,请从设备中删除该应用程序并完全重新启动设备。
  5. 启动Xcode
  6. 删除所有断点
  7. Product -> (按住Option键) Clean Build Folder
  8. Product -> Clean
  9. 通过Xcode->Quit Xcode再次关闭Xcode,(注意:必须是一个优雅的退出,以便Xcode可以正确地进行完整的关闭或清理循环)
  10. 重新启动您的Mac
  11. 启动Xcode
  12. 如果在模拟器中运行,请选择与崩溃时不同的设备进行模拟。
  • 进行应用程序的测试运行(无断点)

  • 如果一切顺利,开始添加断点(所有异常始终是一个不错的起点)。

  • 万能公约(也称为“科伯曼机动”):如果上述所有操作都无效,则重新执行所有步骤,但在第9和10步之间插入以下步骤: 9A)删除Xcode应用并重新安装Xcode。


我已经做了所有这些,但感谢您比我更完整地记录下来。看起来即使完成了上面列出的所有步骤,它最终还是会崩溃。难过的表情 目前正在进行6.2版本的开发,也许那会带来更多的稳定性。 - BK-
1
以上内容旨在修复XCode出现问题的情况。然而,导致问题的原因可能与您正在运行的代码有关...例如,大量记录到控制台将不可避免地导致XCode开始崩溃。此外,在C/C++(甚至是objC)中存在错误的内存指针会使任何环境随着时间的推移变得有些奇怪(即使已经捕获)。重点是以上内容旨在使XCode恢复正常...此时,我会尝试缩小您正在尝试运行的项目问题的根本原因。也就是说,您仍然需要修复XCode保持稳定的根本原因。 - Questor
好的观点!我也有同样的发现。清理整个东西有时可以帮助找到崩溃的根本原因。感谢澄清。 - BK-
1
我一开始持怀疑态度,但实际上它对我有用。当在回调函数的回调函数中设置断点时,在6.4版本中会发生崩溃。 :) - manmal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接