2012-07-21 97 views
2

我使用運行在PLCrashReporter之上的QuincyKit來發現iOS應用中的生產崩潰並獲取日誌。有時,如果我在碰撞點之上有幾個調用堆棧級別的變量,它會幫助我調試。比如,如果記錄處理代碼是深層嵌套的許多級別,它會崩潰的是哪個記錄ID。QuincyKit/PLCrashReporter:在崩潰前提供描述*

問題是 - 有沒有辦法提供某種上下文字符串插入到崩潰日誌作爲生成時的描述?我在進入一個調用堆棧創建一條記錄時將其設置,我將在退出時清除它。如果它是非持久性的(即在內存中),那麼更好 - 寫入非易失性存儲器總是會對電池造成負擔,恐怕。

回答

1

發現有限的解決方法。我使用shared memory block,其名稱是從包ID派生的名稱,用於存儲上下文字符串。該塊在正確關閉時清除。然後我重寫我的Quincy代理中的-crashReportDescription,以便它提供共享內存(如果有的話)作爲描述。如果最後一次應用程序關機是崩潰,它只是非空的。

這種方法存在明顯的缺陷。如果他們說,在崩潰和下一次應用程序啓動之間重新啓動設備,則共享內存信息將丟失。

編輯:在設計的第一個版本中,我使用了一個私有的名爲UIPasteboard而不是共享內存。結果是相當的表現。共享內存快了幾個數量級。編輯2:但他們打破了iOS 7中的共享內存,所以UIPasteboard又回來了。遊民。

EDIT3:找到了另一種方法,不太優雅,但它在iOS 7中工作。我將我的上下文字符串存儲在普通的靜態內存塊中。我在PLCrashReporter中放置了一個自定義的碰撞處理程序,其中包含[[PLCrashReporter sharedReporter] setCrashCallbacks:]。在處理程序中,我將所述上下文(如果有)寫入文件。在應用程序啓動時,我讀取了所述文件,並提供了-crashReportDescription中的內容(如果有)。走開,UIPasteboard。

2

不,但feature was proposed over 2 years ago,並有一個補丁。

我實際上更喜歡一個允許記錄環形緩衝區內容(可以有效地將消息記錄到!)的版本,這看起來可能更有用。

相關問題