有时我试图在iOS应用中追踪一个非常罕见的错误。在调试之后,我会在调试器中点击它只是为了让xcode或lldb在我调试时崩溃(通常是因为我正在逐步完成C ++代码)。这超出了真气。
使用gdb可以使用 generate-core-dump
创建文件的核心转储,以便我可以在gdb中重新加载它,至少查看所有内存。我想要的是能够在lldb中做类似的事情,这样当xcode崩溃时(因为它总是倾向于在最糟糕的时候做)我可以恢复我的调试会话而不必重现崩溃。
该应用程序运行在一个非越狱的iPhone上,因此我没有太多访问操作系统来执行诸如从那里转储内存之类的操作。
一个可能的答案是只使用gdb而不是lldb,但我认为这会引起一些我目前不记得的其他问题,而且它没有一些在lldb中有用的功能。
UPDATE:Xcode 6,于2014年秋季发布,包括一个新的 process save-core
lldb中的命令 - lldb现在可以生成用户进程的coredump。例如 (lldb) process save-core /tmp/corefile
等一会儿。
Xcode 5和更早版本lldb的原始答案是:
此功能尚未在lldb中实现。就此而言,此功能在Apple版本的gdb中也未实现。
虽然这不是一个常见的功能,但其他人所说的也是有用的。希望有人有足够的动力将这种能力添加到lldb。我不确定它在iOS设备上的效果如何,因为它将涉及通过一种对大数据传输效率不高的协议传输到Mac的大量数据 - 我预计它会非常慢。
可以使用lldb -c / tmp / corefile打开核心文件
值得注意的是,iOS的流程资源管理器工具可以生成任何PID的核心转储(假设您拥有root或与您的UID相同),而不会影响流程。