我被要求調試和改進一個複雜的多線程應用程序,由我無權訪問的人編寫,使用併發隊列(包括GCD和NSOperationQueue)。我無法訪問多線程體系結構的計劃,也就是說需要在什麼時候發生的高級設計文檔。我需要制定這樣的計劃,以瞭解應用程序的工作原理以及它正在做什麼。如何查看在Xcode中啓動了一個線程?
運行代碼和調試時,我可以在Xcode的Debug Navigator中看到正在運行的各種線程。 有沒有一種方法可以識別源代碼中特定線程的產生?是否有辦法確定NSOperation屬於哪一個NSOperationQueue?
例如,我可以在調試導航看到(或者通過使用LLDB的「線程回溯」命令)線程的堆棧跟蹤,但「最早」用戶代碼我可以查看是被覆蓋的(的NSOperation *)start
方法 - 在堆棧之前的位置比剛纔顯示的調用該方法的框架的彙編指令(例如__block_global_6
,_dispatch_call_block_and_release
等)要早。
我調查過並尋求各種調試方法,但沒有成功。離我最近的是方法混合的想法,但我認爲這不適用於排隊的NSOperation線程。請原諒我的模糊性:我知道,儘管我看起來很辛苦,但我可能提出了錯誤的問題,因此可能沒有在我的腦海中形成相當清晰的問題,但我問社區求助! 謝謝
另一個想法是:這樣的追蹤可能通過儀器?我查看了系統跟蹤模板,但我再也看不到一種方法。 – 2013-05-13 11:21:39
是的,儀器將允許您使用dtrace來建立這種跟蹤。 – 2013-05-13 18:11:30