詞彙表/出問題的時候

Spindump

又稱:停止回應報告

簡短回答

spindump是一份診斷報告,記錄Mac上各個程序當時正在做什麼,用來調查當住或停止回應的App。macOS內建spindump工具,活動監視器也可以從「更多」選單產生一份。

spindump就像是對整個系統、而不是單一程序做的取樣。它會顯示哪些執行緒正在執行、哪些在等待,幫助開發者看出App為什麼停止回應。

Apple對活動監視器中Spindump的說明是:為使用強制結束終止的無回應App產生報告。它是「更多」選單中的幾種診斷報告之一,其他還有「取樣程序」和「系統診斷」。

如何在活動監視器中產生spindump

按一下活動監視器視窗上方的「更多」按鈕(三個點),選擇「執行Spindump」。系統可能會要求你輸入管理者密碼。完成後報告會打開,你可以將它儲存。

要在App當住的當下產生,而不是之後,報告才能記錄到問題。

拿到spindump之後該怎麼做

把它附加到錯誤回報中,傳給該App的開發者,或透過「意見回饋助理」傳給Apple。報告中可能包含你正在執行的App和程序名稱,所以公開分享之前請先檢查一遍。

如何在「終端機」中產生spindump

spindump指令會為Mac上的每個程序取樣,所以必須以root身分執行。它只會記錄各個程序在做什麼,不會停止它們。

  1. 趁App還在當住時打開「終端機」。
  2. 執行sudo spindump Safari -reveal,把Safari換成App名稱的一部分。出現要求時,請輸入你的管理者密碼。
  3. 等它取樣完成。預設時間長度為10秒。
  4. 完成後,報告會儲存在/tmp中,-reveal選項會在Finder中顯示它。

如何看懂spindump

你指定的App會列在最前面,其他所有程序依序列在後面。每個程序都會顯示它的執行緒,以及取樣期間看到的呼叫堆疊。

  • 預設情況下,堆疊會依次數排序。以84開頭的一行,表示在84次取樣中都出現過。
  • 堆疊框開頭的星號(*)表示核心程式碼。
  • 每個堆疊最深處的堆疊框會顯示該執行緒當時是在執行還是被暫停。
  • 如果App的主執行緒被暫停、正在等待另一個程序,就在同一份報告中查看那個程序。這正是它比單一程序取樣更好的地方。

spindump儲存在哪裡

當你強制結束一個沒有回應的App時,macOS可以自動產生一份報告,並可能詢問是否要傳送給Apple。這些報告儲存在/Library/Logs/DiagnosticReports中。

你可以在「應用程式」>「工具程式」中的「主控台」App瀏覽它們。在側邊欄的「報告」底下,查看「Spin報告」和「診斷報告」。選擇一份報告即可閱讀。

你自己從活動監視器產生的報告,完成後會在視窗中打開。關閉視窗之前請先從中儲存報告,這樣你就有一份副本可以傳送。

取樣、spindump還是系統診斷

活動監視器的「更多」選單提供好幾種報告。請選擇符合問題的那一種。spindump比取樣大得多,因為它包含每個程序;系統診斷花的時間更長,執行前還會顯示隱私權提示。如果開發者要的是取樣,就傳送取樣。如果Apple支援要求特定的報告,就傳送那一種。

  • 取樣程序:單一程序,大約3秒。在你知道是哪個App卡住或忙碌時使用。
  • Spindump:Mac上的所有程序。在App當住、而原因可能出在另一個程序時使用。
  • 系統診斷:一份更大的報告,根據整台Mac的記錄檔產生,通常是Apple支援要求提供的。

大家常問的問題

Mac上的spindump是什麼?

它是一份記錄各個程序當時在做什麼的診斷報告,用來找出App停止回應的原因。你可以從活動監視器的「更多」選單產生。

spindump和取樣有什麼差別?

「取樣程序」只記錄所選的單一程序。spindump會查看整個系統中的程序,當停止回應的原因不在App本身時更有幫助。

spindump使用大量CPU正常嗎?

它在寫入報告時可能會短暫使用CPU,這通常發生在某個App停止回應之後。報告完成後,它應該會自行停止。

為什麼spindump需要管理者密碼?

它會讀取Mac上每個程序的呼叫堆疊,包括系統程序。macOS只允許root這麼做。

沒有任何東西當住時,也能產生spindump嗎?

可以,但它只會顯示正常的活動。要在App當住時產生,報告才能記錄到問題。

為什麼強制結束App後出現了一份spindump?

macOS會用spindump記錄沒有回應的App在被強制結束時正在做什麼。「傳送給Apple」對話框要提交的就是這份報告。

相關詞條

想找比活動監視器更好的工具?請參閱Mac上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。