如何在连接到iOS的lldb中手动生成核心转储(或等效)

时间:2013-07-26 04:01:35

标签: ios xcode lldb

有时我试图在iOS应用中追踪一个非常罕见的错误。在调试之后,我会在调试器中点击它只是为了让xcode或lldb在我调试时崩溃(通常是因为我正在踩踏C ++代码)。这真是令人愤怒。

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

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

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

2 个答案:

答案 0 :(得分:17)

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

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

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

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

可以使用lldb -c / tmp / corefile

打开核心文件

答案 1 :(得分:1)

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