15

有时我试图找出 iOS 应用程序中一个非常罕见的错误。经过数小时的尝试复制后,我将在调试器中点击它,但在我调试时(通常是在我单步执行 C++ 代码时)让 xcode 或 lldb 崩溃。这真是令人气愤。

使用 gdb,您可以generate-core-dump用来创建文件的核心转储,以便我可以在 gdb 中重新加载它并至少查看所有内存。我想要的是能够在 lldb 中做类似的事情,这样当 xcode 崩溃时(因为它总是在最坏的时候这样做)我可以恢复我的调试会话而不必重现崩溃。

该应用程序在未越狱的 iPhone 上运行,因此我无法访问操作系统来执行诸如从那里转储内存之类的操作。

一个可能的答案是只使用 gdb 而不是 lldb,但我认为这会导致一些我目前不记得的其他问题,而且它没有一些在 lldb 中有用的功能。

4

2 回答 2

23

更新:Xcode 6 于 2014 年秋季发布,process save-core在 lldb 中包含一个新命令——lldb 现在可以生成用户进程的核心转储。例如(lldb) process save-core /tmp/corefile,稍等一下。

Xcode 5 和更早的 lldb 的原始答案是:

此功能尚未在 lldb 中实现。就此而言,Apple 版本的 gdb 也没有实现此功能。

虽然不是通常要求的功能,但其他人说它也很有用。希望有人有足够的动力将这种能力添加到 lldb。我不确定它在 iOS 设备上的运行情况如何,因为它将涉及通过一种对大数据传输效率不高的协议将大量数据传输到 Mac - 我预计它会非常慢.

核心文件可以用 lldb -c /tmp/corefile 打开

于 2013-07-26T07:39:09.820 回答
1

值得注意的是,iOS 的进程资源管理器工具可以生成任何 PID 的核心转储(假设您有 root 或与您的 UID 相同),而不会影响进程。

于 2015-09-06T03:34:46.967 回答