Cocoa应用尝试在崩溃时启动lldb?

时间:2013-12-02 15:45:36

标签: macos cocoa debugging osx-mavericks lldb

有几位用户报告说,有时当我的应用崩溃时,会收到一个这样的消息框:

The lldb command requires the command line developer tools. Would you like to install the tools now?

崩溃(SIGABRT)看起来像我的代码中某处的竞争条件。但是,当发生这种情况时,为什么它似乎试图启动lldb?我从来没有见过这样的东西,对于几个用户而言似乎相当孤立,我无法在本地重现 - 尽管我确实安装了开发人员工具。

这几乎就像在.NET中进行JIT调试一样,但我从来没有在Cocoa中听到过这种情况,我对谷歌的搜索也毫无结果。


编辑:

如果我运行ps,我们可以看到Problem ReporterInstall Command Line Developer Tools

19582   0.0  0.4  2568032  33224   ??  S    10:22AM   0:00.72 /System/Library/CoreServices/Problem Reporter.app/Contents/MacOS/Problem Reporter
19579   0.0  0.2  2531748  13276   ??  S    10:22AM   0:00.16 /System/Library/CoreServices/Install Command Line Developer Tools.app/Contents/MacOS/Install Command Line Developer Tools

列表中没有其他可疑之处。如果我使用ps开关运行-f,我可以看到Install Command Line Developer Tools的父流程为launchd

1 个答案:

答案 0 :(得分:1)

Apple发布的CrashReporter工具不会尝试将调试器连接到崩溃的程序。曾经有一个选项可以在Leopard或其附近执行此操作(默认情况下不启用),但Mountain Lion(甚至可能是SnowLeopard)关闭了该功能。我不认为可以在Leopard上安装任何带有lldb的Xcode,所以似乎不太可能是旧的Apple CrashReporter试图将调试器挂钩到应用程序。 OTOH,可以用另一个可以做到这一点的Apple的CrashReporter工具替换,而一些第三方供应商也会这样做。也许这就是发生了什么?

如果你看到这个的用户在对话框出现时向你发送“ps auwwx”的输出,你可能会发现罪魁祸首。