2

В последнее время я получаю много вращающихся пляжных мячей в разных приложениях для OSX. Похоже, что они происходят с большой частотой при щелчке правой кнопкой мыши, но это не ограничивается одним приложением. Это происходит в Safari, Adium, NetNewsWire и т.д. Я чувствую, что есть какая-то общая функция / плагин / рутина, вызывающая это, вероятно, из-за стороннего расширения или из-за того, что я включил.

Каков наилучший способ решить проблему такого рода? Можно ли как-нибудь сбросить зависшее приложение, чтобы посмотреть, что оно пытается сделать? Есть ли что-то, что я могу сделать, чтобы отследить, что может быть причиной этого.

3 ответа3

5

Одна утилита для отслеживания зависаний называется Spin Control, которая устанавливается вместе с инструментами разработчика Apple в папке /Developer/Applications/Performance Tools . Как только вы откроете его, и приложение зависнет, оно запросит ваш пароль и начнет сбор данных. После сбоя или повторного реагирования приложения вы можете просмотреть отчет, который оно собрало.

Обнаруженные зависания

Образец отчета

Вы можете просмотреть отчет и просмотреть перечисленные вызовы - все, что делала программа (элементы с отступами - это дополнительные вызовы). Число рядом с каждым элементом в списке, по-видимому, показывает, сколько времени было потрачено на этот вызов, поэтому, если вы посмотрите на их названия (по крайней мере, понятные), вы сможете найти некоторую информацию о том, что было так долго Если вы найдете что-то, в чем вы не уверены, вы также можете спросить об этом конкретно.

И, если происходит сбой приложения, если вы нажмете кнопку "Сообщить", вы получите аналогичный список того, что программа делала в случае сбоя, в дополнение к возникшей ошибке. Если вы посмотрите описание ошибки и посмотрите ближе к концу списка вызовов, вы, вероятно, сможете выяснить, что пошло не так.

3

Спасибо за ответы, они были очень полезны. jtbandes дал мне первый шаг в решении проблемы, но я хотел бы подробно остановиться на других частях на случай, если это поможет другим.

Мне удалось добиться того, чтобы проблема произошла разумно воспроизводимым образом с Adium. По сути, запустите приложение, откройте беседу, введите текст, а затем щелкните правой кнопкой мыши часть текста. Spinner в первый раз после запуска, длится более минуты.

Поэтому я запустил 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, но на этот раз у меня также был открыт Монитор активности, я выбрал процесс и использовал Inspect-> Open Files and Ports для мониторинга того, с чем конкретно приложение работало. Когда я повторил шаги, чтобы сгенерировать проблему, я смог получить следующее из списка (обратите внимание, что новые открытые файлы / порты появляются в конце списка, поэтому проще всего найти проблему, посмотрев в конец список):

/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

После этого я смог просмотреть элементы в локальном каталоге элементов контекстного меню и определить, что вызывает проблему.

Спасибо за помощь.

1

Ну, это может быть расширение стороннего производителя, или это может быть низкий объем памяти или медленный жесткий диск. Что это за компьютер? Откройте "Системные настройки". Есть ли у вас какие-либо значки в разделе "Другое"? Откройте вверх / Библиотека / InputManagers. Есть ли там файлы? Когда приложение зависает, принудительно закройте его и нажмите "Сообщить". Разместите журнал здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .