正文
macOS系统上,程序发生崩溃的时候,默认会生成一个.crash文件。如果想要更多的信息我们需要core dump。
默认macOS系统有一个目录 /cores
,但是需要app/exe开启dump功能,才会在这个目录下生成对应的core dump文件。
方法如下:
首先确保 /cores
目录存在,并且有相应权限
ref:Core Dumps,有些信息过期了,比如现在10.15.6上面没有 /etc/launchd.conf
文件。
保证系统中存在 /cores 目录
$ sudo mkdir /cores
设置一些属性
$ sudo chown root:admin /cores
$ sudo chmod 1775 /cores
$ sudo chmod o+w /cores
另外,还需要进程开启写dump
ref: [Resolved] App crashes when launched from dock, doesn’t crash when run from terminal
struct rlimit limit;
BOOL success = getrlimit(RLIMIT_CORE, &limit) >= 0;
assert(success);
limit.rlim_cur = limit.rlim_max;
success = setrlimit(RLIMIT_CORE, &limit) >= 0;
assert(success);
不过 Mac OS X Debugging Magic 中给的写法是:
#include <sys/resource.h>
static bool EnableCoreDumps(void)
{
struct rlimit limit;
limit.rlim_cur = RLIM_INFINITY;
limit.rlim_max = RLIM_INFINITY;
return setrlimit(RLIMIT_CORE, &limit) == 0;
}
通过上面的设置之后,如果macOS系统中的进程发生崩溃,会有core dump文件在 /cores
目录下生成。然后就可以通过lldb,gdb等工具调试了。