当Mac应用崩溃时,CrashReporter对话框没有显示

4
我有一个Mac应用商店应用程序,当它崩溃时会静默消失。它不会显示CrashReporter对话框,让用户有机会向Apple报告崩溃情况。
我在多台机器上看到了相同的行为。这可能是由于什么原因引起的?
根据TN2123
如果崩溃的程序正在以已登录的GUI用户身份运行,CrashReporter将向用户呈现一个对话框,询问他们是否要向Apple提交错误报告
“作为已登录的GUI用户运行”是什么意思?窗口必须可见吗?
更新:
我正在阅读ReportCrash手册页,发现了以下内容:
对于应用程序崩溃(但不包括后台进程崩溃),ReportCrash将显示一个对话框,通知用户应用程序意外退出,并提供重新打开应用程序或将报告发送给Apple的选项。对于开发人员,可以使用/Developer/Applications/Utilities/CrashReporterPrefs.app来调整此对话框的行为,该应用程序是作为开发工具的一部分安装的。
我运行了CrashReporterPrefs并将我的CrashReporter模式更改为Developer。当我运行应用程序并触发崩溃时,CrashReporter对话框会显示出来!
所以我想现在的问题是:“应用程序崩溃”和“后台进程崩溃”之间有什么区别?

应用程序是调用 exit() 还是 _exit()?它可能会自行退出,这样就是一种受控制的关闭而不是崩溃吗?当发生这种情况时,是否有任何内容写入控制台日志? - Ken Thomases
这只发生在你使用Xcode运行时吗?还是当你从Finder自己运行应用程序时也会出现? - Peter Hosey
@PeterHosey - 当应用程序从Finder中运行时 - pepsi
崩溃报告对话框仅适用于图形用户界面应用程序,并不适用于命令行工具或类似工具。(有一个开发者工具CrashReporterPrefs,可更改此设置,但默认情况下不显示它。) - Ken Thomases
1
@pepsi:您的应用程序是否已经开启了LSUIElementLSBackgroundOnly,还是一个普通的用户界面应用程序? - Peter Hosey
显示剩余5条评论
2个回答

3

如果您的应用程序使用LSUIElement或LSBackgroundOnly,则在确定是否显示崩溃报告器的目的下,它是一个“后台进程”。 (其他“后台进程”包括UNIX-land守护程序,例如Apache Web服务器以及从SSH或telnet连接启动的进程。)


0

由于CrashReporterPrefs不再随开发者工具一起提供,您可以通过在终端中运行以下命令来更改显示守护程序对话框的行为:

defaults write com.apple.CrashReporter DialogType Developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接