Я потратил несколько дней, пытаясь отследить ошибку, которую многие опытные разработчики 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.
Лучшее, что я мог сделать, это заставить его аварийно завершить работу при запуске Instruments-> Allocations, но когда я посмотрел на регион, он указал на 50+ распределений (из множества различных функций), но все они были уже освобождены и больше не работают. И все они были внутренними, в ImageIO (start_pass_huff_decoder и т. Д.)
Я работаю с довольно сложной, большой базой кода, поэтому проверка кода всего проекта невозможна.
Мне действительно нужен какой-то способ, чтобы отладчик сломался, как только контрольная сумма будет нарушена, а не позже, когда он просто выполняет несвязанный malloc, который не предлагает никакой полезной информации. Установка точки останова на malloc_error_break
, кажется, не имеет никакого эффекта.
Понятно, что у меня где-то недопустимый указатель, записывающий в память, этого не должно быть, но я застрял в том, как сузить, какая часть кода вызывает его.
Любые советы или предложения будут очень полезны !!!
Заранее спасибо.