web-dev-qa-db-ja.com

Mac OSXでアプリケーションがハングするトラブルシューティング

最近、OSXのさまざまなアプリでスピニングビーチボールをたくさん入手しています。右クリックすると頻繁に発生するようですが、これは単一のアプリに限定されません。これはSafari、Adium、NetNewsWireなどで発生します。私の直感では、これを引き起こしている一般的な機能/プラグイン/ルーチンがいくつかあります。おそらく、サードパーティの拡張機能または私が有効にした他の何かからです。

この種の問題のトラブルシューティングを試みるための最善の方法は何ですか?ハングしたアプリをダンプして、何をしようとしているのかを確認できますか?これを引き起こしている可能性があるものを追跡するために私ができることがいくつかありますか?.

3
Tim

ハングを追跡するためのユーティリティの1つは、Spin Controlと呼ばれ、AppleのDeveloperToolsとともに/Developer/Applications/Performance Toolsフォルダーにインストールされます。それを開いてアプリケーションがハングすると、パスワードの入力を求められ、データの収集が開始されます。アプリケーションがクラッシュするか、再び応答するようになったら、収集したレポートを確認できます。

Detected Hangs

Sample Report

レポートを調べて、リストされた呼び出しを確認できます。これは、プログラムが実行していたすべてのことです(インデントされた項目はサブ呼び出しです)。リストの各項目の横にある数字は、その通話に費やされた時間のように見えるので、それらの名前(少なくともわかりやすいもの)を見ると、何があったかについての情報を収集できる可能性があります。とても時間がかかります。よくわからないことがあれば、具体的に質問することもできます。

また、アプリケーションがクラッシュした場合、[レポート]ボタンをクリックすると、発生したエラーに加えて、クラッシュ時にプログラムが実行していたことの同様のリストが表示されます。エラーの説明を見て、呼び出しのリストの終わり近くを見ると、おそらく何が悪かったのかを理解できます。

6
jtbandes

回答ありがとうございました、彼らは非常に役に立ちました。 jtbandesは私に問題を解決するための最初のステップを与えてくれましたが、それが他の人を助ける場合に備えて、他の部分の詳細に立ち入りたいと思いました。

私はAdiumを使って合理的に再現可能な方法で問題を発生させることができました。基本的に、アプリを起動し、会話を開き、テキストを入力してから、テキストの一部を右クリックします。スピナーは発売後初めて、1分以上続きます。

そこで、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

これから、ローカルのコンテキストメニューアイテムディレクトリ内のアイテムを調べて、問題の原因を特定することができました。

助けてくれてありがとう。

4
Tim

まあ、それはサードパーティの拡張機能である可能性があります、またはそれは低RAMまたは遅いハードディスクである可能性があります。どんなコンピューターですか? 「システム環境設定」を開きます。 「その他」の下にアイコンはありますか?/Library/InputManagersを開きます。そこにファイルはありますか?アプリがハングした場合は、アプリを強制終了して[レポート]をクリックします。ここにログを投稿してください。

1
ACoolie