【问题标题】:How to use gdb debugger with xcode 5.1如何在 xcode 5.1 中使用 gdb 调试器
【发布时间】:2026-01-03 12:40:01
【问题描述】:

Xcode 5.1 不再正式支持 GDB,而是默认只支持 LLDB。 LLDB 的问题在于它没有显示有关应用程序崩溃的有用调试信息。此外,所有异常断点都只是在 main.m 上中断。这使得调试非常乏味。我在这里读到,这是 LLDB 的一个常见问题,而 GDB 做得更好。

如何为 xcode 5.1 启用 GDB?

【问题讨论】:

  • 不是问题的真正答案,但可能是问题的解决方案。检查这篇文章以在抛出异常而不是在未捕获异常时设置断点。 *.com/questions/1163981/…
  • 不幸的是,这似乎已经过时了。 xcode 4 和 5 的解决方案是我已经完成的(添加所有异常断点),它在 main.m 中中断
  • 不要使用“所有 Objective-C 异常”在 objc_exception_throw-[NSException raise] 上设置显式断点这似乎对我有用。请注意,许多异常实际上是在事件处理期间从 UIKit 内部深处抛出的,因此无论如何您都不会从它们那里获得很多信息。

标签: ios xcode gdb lldb


【解决方案1】:

没有办法将 gdb 与更新的 Xcode 一起使用。

我不知道您所说的“它在应用程序崩溃时没有显示有用的调试信息”是什么意思。最好向 bugreporter.apple.com 提交错误并提供更多详细信息,可能有一种方法可以让 lldb 为您正常工作。

我也不确定当您说“所有异常断点在 main.m 上中断”时您看到了什么。如果您转到 lldb 控制台并执行以下操作:

(lldb) 中断列表

断点实际上是在 main.m 上吗?

在使用 Xcode 5 调试 UI 时需要注意的一点(可能是从 4 开始,我不记得了。)当您的程序因堆栈帧中的崩溃或异常而停止时,该堆栈帧以以下帧开头如果没有调试信息,Xcode 实际上会选择堆栈中包含调试信息的第一帧。这是为了避免向人们显示充满反汇编的屏幕,有些人觉得这很可怕......所以源框架将显示,比如,main.m,尽管实际的最底部框架是别的东西。

Xcode 还有一个“堆栈压缩”功能,可以隐藏“无趣”的帧。这也可以使这种不再混淆 - 尽管它通常会显示您可能会错过的最底部的帧并且只看到您的源帧。不喜欢的可以关闭堆栈压缩。

确保这不是您所看到的。

【讨论】:

  • 我认为这就是必须发生的事情。崩溃发生在 UIKit 内部深处的某个地方,所以它只是撞到了 main.m。至于没有显示调试消息,最终是因为我有一个框架可以吞下所有异常。我把它关掉了,现在可以正常工作了。
最近更新 更多