我花了好幾天試圖追查,很多經驗豐富的iOS開發可能已經看到在一個點上或在其職業生涯以外的錯誤:釋放對象的校驗和錯誤 - 如何在設備上進行故障排除?
MyApp-IPad(1403,0x5ab3000) malloc: *** error for object 0x2b3aa04: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
我身邊在網上搜索,發現很多人推薦使用NSZombieEnabled
或MallocStackLogging
,但它似乎是一個給定的,除非你使用模擬器,否則這些不起作用。不幸的是,除非我使用實際的設備,否則我不會讓我的崩潰發生,在這種情況下,每隔幾分鐘就會發生一次。
當使用MallocStackLogging時,我得到一個寫入本地IPad的文件(位於/ private/var/mobile/Applications/....),但似乎沒有任何方法可將該.link文件傳輸到我的本地機器(因爲該設備沒有越獄),即使我可以在那裏似乎沒有辦法使用malloc_history在本地機器上使用它。
我能做的最好的事情就是讓它在運行儀器 - >分配時崩潰,但是當我查看該區域時,它指向50+分配(來自許多不同功能),但是所有分配都已經釋放並且不再活動。他們都是內部分配,在ImageIO(start_pass_huff_decoder等)
我正在使用一個相當複雜的大型代碼庫,因此整個項目的代碼檢查是不可行的。
我真的需要一些方法來讓調試器在違反校驗和時立即中斷,而不是晚些時候它只是在做一個不相關的malloc,它不提供任何有用的信息。在malloc_error_break
處設置斷點似乎不起作用。
它很明顯,我有一個無效的指針寫入內存不應該是,但我堅持如何縮小哪一段代碼導致它。
任何意見或建議將是非常有幫助的!
在此先感謝。
我一直在試圖用設備進行調試,但不知道如何查明正在執行錯誤內存寫入的代碼。我嘗試了靜態分析器,但沒有發現任何相關內容,但感謝這個想法。我寧願不分享我的代碼,你能否給我任何其他一般性建議來解決這類問題? – Locksleyu
你試過nikita zhuk的clang靜態分析儀嗎? NSZombie展示了什麼?嘗試在設備上調試您的應用程序並嘗試重現崩潰。儘可能地去除泄漏。 –