好像我无法在Mac OS X 10.6.8中生成核心转储.
$ ulimit -c unlimited
$ ./a.out
Hello world!
Segmentation fault
$ find ~/ -type f -name core
# ls -la /cores/
total 0
drwxrwxr-t@ 2 root admin 68 24 jui 2010 .
drwxrwxr-t 31 root admin 1122 17 oct 15:52 ..
Run Code Online (Sandbox Code Playgroud)
我当前的目录,我的HOME和/ cores /仍为空...
有没有办法防止EXC_BAD_ACCESS应用程序崩溃,就像@try..@catch您可以优雅地处理异常一样.
更新:
代码在尝试取消引用无效指针时崩溃.这是第三方库,它与外部硬件接口,因此我无法在本地调试.我试图阻止它崩溃并将数据输出到我的应用程序上的调试控制台.
看起来OS X(10.6)默认不生成编码转储.
使用ulimit -c unlimited它不是一个好的解决方案,因为ulimit确实在环境变量中设置了限制.这仅适用于从执行ulimit的shell执行的控制台应用程序.如果你有一个gui应用程序,这将无法正常工作.
一段时间以来,我一直在努力反对这一点。显然读过这个:Where are core dumps write on Mac?
这样我们就100%清楚了:
我做了:
touch /cores/x
rm /cores/x
Run Code Online (Sandbox Code Playgroud)
所以写权限是好的。
做过
ulimit -c unlimited
Run Code Online (Sandbox Code Playgroud)
所以应该生成核心。
但即使是微不足道的:
sleep 100 & killall -SIGSEGV sleep
Run Code Online (Sandbox Code Playgroud)
不生成核心。我目前的赌注是操作系统的文件系统保护功能之一让我感到悲伤。另一种可能性是这与 ARM(在 M1 Max 上运行)有关。
任何想法都非常受欢迎...我什至尝试过这个但没有成功:(Mac)将核心文件保留在可执行文件所在的位置而不是/cores?