![解决 Mac OS X 上应用程序挂起的问题](https://linux22.com/image/1209634/%E8%A7%A3%E5%86%B3%20Mac%20OS%20X%20%E4%B8%8A%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%8C%82%E8%B5%B7%E7%9A%84%E9%97%AE%E9%A2%98.png)
最近我在 OSX 上的不同应用中看到很多旋转的沙滩球。右键单击时,它们似乎经常发生,但这种情况并不局限于单个应用。Safari、Adium、NetNewsWire 等都出现这种情况。我的直觉是,有一些常见的功能/插件/例程导致了这种情况,可能是由一些第三方扩展或我启用的其他程序引起的。
解决此类问题的最佳方法是什么?我能以某种方式转储挂起的应用程序以查看它试图做什么吗?我可以采取一些措施来追踪可能导致这种情况的原因吗?
答案1
一款用于追踪挂起情况的实用程序名为 Spin Control,它与 Apple 的 Developer Tools 一起安装在/Developer/Applications/Performance Tools
文件夹中。一旦您打开它,如果应用程序挂起,它会要求您输入密码并开始收集数据。一旦应用程序崩溃或恢复响应,您就可以查看它收集的报告。
您可以浏览报告并查看列出的调用,这些调用是程序正在执行的所有操作(缩进的项目是子调用)。列表中每个项目旁边的数字似乎表示该调用花费了多少时间,因此,如果您查看它们的名称(至少是可理解的名称),您可能能够收集一些有关花费这么长时间的信息。如果您发现某些不确定的内容,也可以具体询问。
而且,如果应用程序崩溃,如果您单击“报告”按钮,除了引发的错误之外,您还将获得类似的程序崩溃时所做操作的列表。如果您查看错误描述,并查看调用列表的末尾,您可能就能找出问题所在。
答案2
感谢您的回复,它们非常有帮助。jtbandes 帮助我解决了这个问题的第一步,但我想详细介绍其他部分,以便对其他人有所帮助。
我能够使用 Adium 以合理的可重现方式使问题发生。基本上,启动应用程序,打开对话,输入一些文本,然后右键单击一些文本。启动后第一次出现旋转器,持续一分钟以上。
于是我启动了 Spin Control,进入首选项,只针对 Adium,按照引发问题的程序操作。我能够获得该问题的文本报告,并发现问题正是我所期望的:
5531 Thread_7203
5531 0x30b9
5531 0x3192
5531 NSApplicationMain
5531 -[NSApplication run]
5531 -[NSApplication sendEvent:]
5531 -[NSWindow sendEvent:]
5531 -[NSTextView rightMouseDown:]
5531 -[NSView rightMouseDown:]
5531 -[NSMenu _popUpMenuWithEvent:forView:]
5531 -[NSMenu _popUpContextMenu:withEvent:forView:]
5531 -[NSMenu _popUpContextMenu:withEvent:forView:withFont:]
5531 -[NSCarbonMenuImpl _popUpContextMenu:withEvent:forView:withFont:]
5531 _NSPopUpCarbonMenu1
5531 _NSPopUpCarbonMenu2
5531 _NSPopUpCarbonMenu3
5531 _ContextualMenuInsertItems
5531 ContextualMenuInsertItems(MenuData*, unsigned short, AEDesc const*, ContextualMenuHelp const*, unsigned long*, OpaqueContextualMenuItemsRef**)
5531 TContextualMenuPluginList::GetPlugins()
5531 TContextualMenuPlugin::LoadContextualMenuPlugins(FSRef const&, __CFArray*)
5531 TContextualMenuPlugin::LoadCMPluginsFromCFPlugin(FSRef const&, __CFArray*)
5531 0x1d1ee0d6
因此看起来我确实遇到了插件问题,但缺乏相关详细信息。
因此我重新启动了 Adium,但这次我还打开了活动监视器并选择了该进程,并使用检查->打开文件和端口来监视应用程序具体在处理什么。当我重复生成问题的步骤时,我能够从列表中获取以下内容(请注意,打开的新文件/端口出现在列表末尾,因此通过查看列表末尾最容易找到问题):
/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Resources/English.lproj/Localized.rsrc
/Users/tim/Library/Contextual Menu Items
localhost:61506->localhost:26165
由此,我可以浏览本地上下文菜单项目录中的项目并确定导致问题的项目。
谢谢您的帮助。
答案3
嗯,可能是第三方扩展,也可能是内存不足或硬盘速度慢。这是什么类型的电脑?打开“系统偏好设置”。“其他”下有图标吗?打开 /Library/InputManagers。那里有文件吗?当应用程序挂起时,强制退出并单击“报告”。在此处发布日志。