什么是 LLDB RPC 服务器?它什么时候在 Xcode 崩溃?为什么会崩溃?
What is LLDB RPC Server ? When does it crash in Xcode? Why it crashes?
我在调试器中收到一条消息:
The LLDB RPC server has crashed. The crash log is located in ~/Library/Logs/DiagnosticReports and has a prefix 'lldb-rpc-server'. Please file a bug and attach the most recent crash log.
在我的例子中,每次我 运行 我的应用程序时,LLDB RPC 服务器总是崩溃,即使在清理构建文件夹并删除并重新安装 Xcode(版本 8.3.3 (8E3004b))之后也是如此.
原来LLDB显然对我设置的断点有异议,只是将这个断点移动一行就解决了问题。
我遇到了同样的问题,删除了一些断点后修复了它。完全不知道为什么会发生这种情况,但至少你可以删除断点并使用一些 NSLog()
或 print()
如果你在 Swift 中并在它们的帮助下进行调试。祝你好运!
以我为例。我还使用 SQLite.swift 创建数据库。当我试图在代码中更改现有 table 的列数据类型时发生崩溃(这不是正确的方法),然后插入一个具有新数据类型的元组,然后尝试打印所有元组。
解决方法:删除现有的.sqlite3数据库文件或删除table有冲突数据类型并全部重新创建。
在我的例子中:我最近更新到 Xcode 版本 9.3 (9E145) 并且 Xcode 执行到带有断点的行然后我输入 "po XXX" commend 它会显示相同的消息.
我尝试删除以下文件
~/Library/Preferences/com.apple.dt.Xcode.plist
~/Library/Caches/com.apple.dt.Xcode
它解决了。
不知道确切原因,但值得一试。
记得备份这些文件,以防出现意外情况时恢复。
确保你的应用程序不是运行release模式,如果它是release模式然后改变它调试.
显然有很多不同的原因,但对我来说,我使用 DispatchGroup 来跟踪多个异步任务。
我忘记在其中一项异步任务之前调用 dispatchGroup.enter()
(但在完成后仍然调用 dispatchGroup.leave()
)。
添加这个修复了我的崩溃问题。
我找到了这个问题的解决方案。我不知道这是否正确,但这个解决方案对我有用。我所做的是实际上我将两台设备连接到我的 mac mini,在一台设备中我 运行 应用程序并在我的控制台中出现上述错误。然后我删除了一个设备并尝试,这次我的控制台没有出现任何错误,它工作正常。我想你们不会相信这一点,我用两台设备尝试了将近 3 次,一台设备仅适用于一台设备
出现此错误的原因多种多样,主要原因是当您稍后将手表应用程序添加到您的项目时,Xcode 向方案添加了一个额外的构建目标。点击 "run/stop buttons" 右侧的方案部分,然后点击编辑方案,点击构建部分,这是第一个,你会看到 2 个目标,一个有 2 个子目标,其中包括 watch app 和 watch extension 以及另一个没有子目标,它是一个手表应用程序目标。
解决方法很简单,删除没有子目标的 watch 应用目标,然后重新 运行 应用。
对我来说,我的观察列表中有一个表达正在呕吐。在控制台中查看崩溃日志时,报告的崩溃线程中有类似这样的内容:
lldb_private::EvaluateExpressionOptions const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, lldb_private::ValueObject*) + 619
17 com.apple.LLDB.framework 0x0000000102855f18 lldb::SBFrame::**EvaluateExpression**(char const*, lldb::SBExpressionOptions const&) + 696
18 lldb-rpc-server 0x00000001025e72e9 rpc_server::_ZN4lldb7SBFrame18EvaluateExpressionEPKcRKNS_19SBExpressionOptionsE::HandleRPCCall(rpc_common::Connection&, rpc_common::RPCStream&, rpc_common::RPCStream&) + 169
19 lldb-rpc-server 0x00000001025f8ce1 rpc_common::Connection::PrivateHandleRPCPacket(rpc_common::RPCPacket&, rpc_common::RPCPacket&, bool&) + 1553
20 lldb-rpc-server 0x00000001025fc36d Packets::ProcessPackets() + 1005
21 lldb-rpc-server 0x00000001025fbe96 Packets::ReadThread() + 214
22 lldb-rpc-server 0x00000001025fbdb9 Packets::RunReadThread(void*) + 9
23 libsystem_pthread.dylib 0x00007fff6a586109 _pthread_start + 148
24 libsystem_pthread.dylib 0x00007fff6a581b8b thread_start + 15
我 运行 遇到了同样的错误,对下一步该怎么做一无所知。我尝试了接受的答案,我的项目根本没有任何断点。
原来我有一个我没有删除的观察者,每隔几次我都会推送 off/on 包含它的 vc 它最终会因操作错误而崩溃。我不得不 enable zombies 找出哪个 vc 导致了错误。我不得不逐行手动检查代码,以意识到我没有删除观察者。删除后一切正常。
// not removing this caused the error
playerItem?.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.status),
options: [.old, .new],
context: &playerItemContext)
我已经找到了解决方案,这可能不是完美的,但可以解决我的问题。
转到目标构建设置 -> 其他 Swift 标志 -> 检查添加的调试值
删除除 $(inherited) 和 -DDEBUG
之外的所有内容
删除派生数据
清洁和运行
如果工作区有很多断点,那么它就会发生,所以尝试删除所有断点,看看魔术。
我在 Xcode 12.1.1 (12A7605b)
2021 年 1 月在 macOS Catalina 的 Swift 项目中遇到了这个问题。
我在不同的模拟器和真实设备上尝试了清理、删除派生数据、重新启动 mac、运行 - 没有成功。
其他人建议删除断点,但对我来说,调试需要这个断点(我想我可以弄清楚如何以不同的方式调试,使用不同的断点或打印语句,但这令人沮丧)。
我按照错误消息的建议向 Apple 提交了错误报告 - 我敦促其他人也这样做以增加 Apple 修复的机会。
与此同时,我使用了这个解决方法——将代码包装在你想要断点的地方 DispatchQueue.main.async
:
DispatchQueue.main.async { [self] in
print("Put the breakpoint on this line")
}
(注意我们在这里使用 [self]
因为它只是调试代码,但在大多数情况下这些异步调用需要 [weak self]
以避免保留周期和内存泄漏)
对我来说,只要重新启动模拟器就可以了。
我在调试器中收到一条消息:
The LLDB RPC server has crashed. The crash log is located in ~/Library/Logs/DiagnosticReports and has a prefix 'lldb-rpc-server'. Please file a bug and attach the most recent crash log.
在我的例子中,每次我 运行 我的应用程序时,LLDB RPC 服务器总是崩溃,即使在清理构建文件夹并删除并重新安装 Xcode(版本 8.3.3 (8E3004b))之后也是如此.
原来LLDB显然对我设置的断点有异议,只是将这个断点移动一行就解决了问题。
我遇到了同样的问题,删除了一些断点后修复了它。完全不知道为什么会发生这种情况,但至少你可以删除断点并使用一些 NSLog()
或 print()
如果你在 Swift 中并在它们的帮助下进行调试。祝你好运!
以我为例。我还使用 SQLite.swift 创建数据库。当我试图在代码中更改现有 table 的列数据类型时发生崩溃(这不是正确的方法),然后插入一个具有新数据类型的元组,然后尝试打印所有元组。
解决方法:删除现有的.sqlite3数据库文件或删除table有冲突数据类型并全部重新创建。
在我的例子中:我最近更新到 Xcode 版本 9.3 (9E145) 并且 Xcode 执行到带有断点的行然后我输入 "po XXX" commend 它会显示相同的消息. 我尝试删除以下文件
~/Library/Preferences/com.apple.dt.Xcode.plist
~/Library/Caches/com.apple.dt.Xcode
它解决了。 不知道确切原因,但值得一试。
记得备份这些文件,以防出现意外情况时恢复。
确保你的应用程序不是运行release模式,如果它是release模式然后改变它调试.
显然有很多不同的原因,但对我来说,我使用 DispatchGroup 来跟踪多个异步任务。
我忘记在其中一项异步任务之前调用 dispatchGroup.enter()
(但在完成后仍然调用 dispatchGroup.leave()
)。
添加这个修复了我的崩溃问题。
我找到了这个问题的解决方案。我不知道这是否正确,但这个解决方案对我有用。我所做的是实际上我将两台设备连接到我的 mac mini,在一台设备中我 运行 应用程序并在我的控制台中出现上述错误。然后我删除了一个设备并尝试,这次我的控制台没有出现任何错误,它工作正常。我想你们不会相信这一点,我用两台设备尝试了将近 3 次,一台设备仅适用于一台设备
出现此错误的原因多种多样,主要原因是当您稍后将手表应用程序添加到您的项目时,Xcode 向方案添加了一个额外的构建目标。点击 "run/stop buttons" 右侧的方案部分,然后点击编辑方案,点击构建部分,这是第一个,你会看到 2 个目标,一个有 2 个子目标,其中包括 watch app 和 watch extension 以及另一个没有子目标,它是一个手表应用程序目标。
解决方法很简单,删除没有子目标的 watch 应用目标,然后重新 运行 应用。
对我来说,我的观察列表中有一个表达正在呕吐。在控制台中查看崩溃日志时,报告的崩溃线程中有类似这样的内容:
lldb_private::EvaluateExpressionOptions const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, lldb_private::ValueObject*) + 619
17 com.apple.LLDB.framework 0x0000000102855f18 lldb::SBFrame::**EvaluateExpression**(char const*, lldb::SBExpressionOptions const&) + 696
18 lldb-rpc-server 0x00000001025e72e9 rpc_server::_ZN4lldb7SBFrame18EvaluateExpressionEPKcRKNS_19SBExpressionOptionsE::HandleRPCCall(rpc_common::Connection&, rpc_common::RPCStream&, rpc_common::RPCStream&) + 169
19 lldb-rpc-server 0x00000001025f8ce1 rpc_common::Connection::PrivateHandleRPCPacket(rpc_common::RPCPacket&, rpc_common::RPCPacket&, bool&) + 1553
20 lldb-rpc-server 0x00000001025fc36d Packets::ProcessPackets() + 1005
21 lldb-rpc-server 0x00000001025fbe96 Packets::ReadThread() + 214
22 lldb-rpc-server 0x00000001025fbdb9 Packets::RunReadThread(void*) + 9
23 libsystem_pthread.dylib 0x00007fff6a586109 _pthread_start + 148
24 libsystem_pthread.dylib 0x00007fff6a581b8b thread_start + 15
我 运行 遇到了同样的错误,对下一步该怎么做一无所知。我尝试了接受的答案,我的项目根本没有任何断点。
原来我有一个我没有删除的观察者,每隔几次我都会推送 off/on 包含它的 vc 它最终会因操作错误而崩溃。我不得不 enable zombies 找出哪个 vc 导致了错误。我不得不逐行手动检查代码,以意识到我没有删除观察者。删除后一切正常。
// not removing this caused the error
playerItem?.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.status),
options: [.old, .new],
context: &playerItemContext)
我已经找到了解决方案,这可能不是完美的,但可以解决我的问题。
转到目标构建设置 -> 其他 Swift 标志 -> 检查添加的调试值 删除除 $(inherited) 和 -DDEBUG
之外的所有内容删除派生数据
清洁和运行
如果工作区有很多断点,那么它就会发生,所以尝试删除所有断点,看看魔术。
我在 Xcode 12.1.1 (12A7605b)
2021 年 1 月在 macOS Catalina 的 Swift 项目中遇到了这个问题。
我在不同的模拟器和真实设备上尝试了清理、删除派生数据、重新启动 mac、运行 - 没有成功。
其他人建议删除断点,但对我来说,调试需要这个断点(我想我可以弄清楚如何以不同的方式调试,使用不同的断点或打印语句,但这令人沮丧)。
我按照错误消息的建议向 Apple 提交了错误报告 - 我敦促其他人也这样做以增加 Apple 修复的机会。
与此同时,我使用了这个解决方法——将代码包装在你想要断点的地方 DispatchQueue.main.async
:
DispatchQueue.main.async { [self] in
print("Put the breakpoint on this line")
}
(注意我们在这里使用 [self]
因为它只是调试代码,但在大多数情况下这些异步调用需要 [weak self]
以避免保留周期和内存泄漏)
对我来说,只要重新启动模拟器就可以了。