我需要为SIGABRT,SIGBUS,etc等终止的进程启用核心转储文件创建.
在以前版本的MAC OS X(包括ElCapitan)中,我将为所有进程启用Code Dumps文件:
sudo sysctl -w kern.corefile=/Users/tester/core.%U.%P.%N.dump
sudo sysctl -w kern.coredump=1
sudo launchctl limit core unlimited
sudo ulimit -c unlimited
launchctl limit core unlimited
ulimit -c unlimited
Run Code Online (Sandbox Code Playgroud)
现在这种方式不起作用.在本网站上讨论新的gcore命令,但它适用于运行进程.对于KernelCoreDumps,您现在必须启用NVRAM变量官方.
我在 OSX 和 CentOS 上通过 gcc 编译相同的代码:
while (( opt = getopt (argc, argv, "hp:" )) != -1 )
{
fprintf (stderr,"+++++++++++ %d\n\n", opt );
switch ( opt )
{
case 'h':
fprintf(stderr, "Help Page \n %s", help_str);
return 1;
case 'p':
filename = optarg ;
fprintf(stderr,"================== %s\n",optarg);
break;
case '?':
printf("ZHZHZHZHZHUT\n");
return 3;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试运行./a.out -p ./file.txt ya.ru,./a.out ya.ru -p ./file.txt
在 CentOS 6.5 上,两个变体都可以工作。
但在 MAC OS X(10.9) 变体上./a.out ya.ru -p …