2011-07-15 26 views
2

我花了好幾天試圖追查,很多經驗豐富的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 

我身邊在網上搜索,發現很多人推薦使用NSZombieEnabledMallocStackLogging,但它似乎是一個給定的,除非你使用模擬器,否則這些不起作用。不幸的是,除非我使用實際的設備,否則我不會讓我的崩潰發生,在這種情況下,每隔幾分鐘就會發生一次。

當使用MallocStackLogging時,我得到一個寫入本地IPad的文件(位於/ private/var/mobile/Applications/....),但似乎沒有任何方法可將該.link文件傳輸到我的本地機器(因爲該設備沒有越獄),即使我可以在那裏似乎沒有辦法使用malloc_history在本地機器上使用它。

我能做的最好的事情就是讓它在運行儀器 - >分配時崩潰,但是當我查看該區域時,它指向50+分配(來自許多不同功能),但是所有分配都已經釋放並且不再活動。他們都是內部分配,在ImageIO(start_pass_huff_decoder等)

我正在使用一個相當複雜的大型代碼庫,因此整個項目的代碼檢查是不可行的。

我真的需要一些方法來讓調試器在違反校驗和時立即中斷,而不是晚些時候它只是在做一個不相關的malloc,它不提供任何有用的信息。在malloc_error_break處設置斷點似乎不起作用。

它很明顯,我有一個無效的指針寫入內存不應該是,但我堅持如何縮小哪一段代碼導致它。

任何意見或建議將是非常有幫助的!

在此先感謝。

回答

1

您是否嘗試過使用設備進行調試?試試nikita zhuk的鏗鏘靜態分析器和xcode內置的構建和分析功能。您的問題可能是由於內存泄漏。他們都不是完美的解決方案,但你會在某些方面得到幫助。試試看,如果你可以通過郵件發送你的代碼,我會看看問題。如果你沒有任何問題通過郵件發送代碼發送給我。首先嚐試尼基塔朱克的鐺靜態分析儀。

+0

我一直在試圖用設備進行調試,但不知道如何查明正在執行錯誤內存寫入的代碼。我嘗試了靜態分析器,但沒有發現任何相關內容,但感謝這個想法。我寧願不分享我的代碼,你能否給我任何其他一般性建議來解決這類問題? – Locksleyu

+0

你試過nikita zhuk的clang靜態分析儀嗎? NSZombie展示了什麼?嘗試在設備上調試您的應用程序並嘗試重現崩潰。儘可能地去除泄漏。 –

相關問題