有几位用户报告说,有时当我的应用崩溃时,会收到一个这样的消息框:
The lldb command requires the command line developer tools. Would you like to install the tools now?
崩溃(SIGABRT)看起来像我的代码中某处的竞争条件。但是,当发生这种情况时,为什么它似乎试图启动lldb
?我从来没有见过这样的东西,对于几个用户而言似乎相当孤立,我无法在本地重现 - 尽管我确实安装了开发人员工具。
这几乎就像在.NET中进行JIT调试一样,但我从来没有在Cocoa中听到过这种情况,我对谷歌的搜索也毫无结果。
编辑:
如果我运行ps
,我们可以看到Problem Reporter
和Install 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
。
答案 0 :(得分:1)
Apple发布的CrashReporter工具不会尝试将调试器连接到崩溃的程序。曾经有一个选项可以在Leopard或其附近执行此操作(默认情况下不启用),但Mountain Lion(甚至可能是SnowLeopard)关闭了该功能。我不认为可以在Leopard上安装任何带有lldb的Xcode,所以似乎不太可能是旧的Apple CrashReporter试图将调试器挂钩到应用程序。 OTOH,可以用另一个可以做到这一点的Apple的CrashReporter工具替换,而一些第三方供应商也会这样做。也许这就是发生了什么?
如果你看到这个的用户在对话框出现时向你发送“ps auwwx”的输出,你可能会发现罪魁祸首。