在 OSX 上的 gdb 中转储核心(没有“gcore”或“generate-core-file”)

Posted

技术标签:

【中文标题】在 OSX 上的 gdb 中转储核心(没有“gcore”或“generate-core-file”)【英文标题】:Dumping core in gdb on OSX (no "gcore" or "generate-core-file") 【发布时间】:2012-04-30 16:15:39 【问题描述】:

我在 OSX 上使用 gdb,它似乎既没有 gcore 也没有 generate-core-file 命令:

$ gdb
GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Fri Jul  1 10:50:06 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".
(gdb) gcore
Undefined command: "gcore".  Try "help".
(gdb) generate-core-file
Undefined command: "generate-core-file".  Try "help".
(gdb)

鉴于此,我该如何通过 GDB 生成核心转储或类似的转储?

(我怀疑我可以使用dump memory,但这需要一个地址范围,我正在努力寻找正确的info 调用来获得正确的内存范围......)

【问题讨论】:

【参考方案1】:

运行lldb --attach-pid,然后使用process save-core 命令保存内核。请注意,该过程将在您附加到它时立即暂停,因此如果它是一个重要的过程,请小心。

$ lldb --attach-pid <pid>
(lldb) process attach --pid 76669
Process 76669 stopped
Executable module set to "/bin/bash".
Architecture set to: x86_64h-apple-macosx.
(lldb) process save-core "core"
mach_header: 0xfeedfacf 0x01000007 0x00000008 0x00000004 0x00000030 0x00000e08 0x00000000 0x00000000
...
Saving data for segment at 0x7fd455200000
...

【讨论】:

我可以这样做以获得进程的内存转储吗?如何?这不起作用。 -bash: lldb: command not found @NicolasBarbulesco 尝试xcode-select --install 安装开发者工具 @NicolasBarbulesco 您运行的是最新的 Mac OS = 10.11.5 吗?在那个版本上,xcode-select 带有默认安装。 我有 Mac OS X 10.6.8。【参考方案2】:

见How to generate a core file for a crashed app in XCode + gdb?

另外,也许较新的 gdb 具有可在 MacOS 上运行的 gcore。我不知道,但你可以四处寻找。

【讨论】:

以上是关于在 OSX 上的 gdb 中转储核心(没有“gcore”或“generate-core-file”)的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在gdb核心转储中获取线程的开始时间

gdb 调试远程核心转储

gdb 搜索核心转储内存

在核心转储文件上使用 gdb 获取变量的值

比较 2 个 GDB 核心转储

使用 gdb 检查指针是不是可能在核心转储中有效 [重复]