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


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

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

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

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


10823
2017-07-26 04:01


起源

是 image dump sections 你正在寻找的命令?看到 这一页 - borrrden


答案:


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打开核心文件


15
2017-07-26 07:39



现在这仍然适用吗? - toasted_flakes
是的,今天仍然无法使用lldb生成用户进程coredump(2014年2月),我现在还不知道是否有人正在开展此功能。 - Jason Molenda
更新了答案,注意Xcode 6现在可以在Mac OS X上保存用户进程的核心文件。 - Jason Molenda


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


0
2017-09-06 03:34