неверная контрольная сумма для освобожденного объекта - Как устранить неполадки на устройстве? - PullRequest
2 голосов
/ 15 июля 2011

Я потратил несколько дней, пытаясь отследить ошибку, которую многие опытные разработчики 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, кажется, не имеет никакого эффекта.

Понятно, что у меня где-то недопустимый указатель, записывающий в память, этого не должно быть, но я застрял в том, как сузить, какая часть кода вызывает его.

Любые советы или предложения будут очень полезны !!!

Заранее спасибо.

1 Ответ

1 голос
/ 15 июля 2011

Вы пробовали отладку на устройстве? Попробуйте статический анализатор Никиты Жука clang и встроенную в xcode функцию построения и анализа. Ваша проблема может быть из-за утечки памяти. Они оба не являются идеальным решением, но в некоторых случаях вы получите помощь. Попробуйте, и если вы можете отправить свой код по почте, я рассмотрю вопрос. Если у вас нет проблем с отправкой кода по почте, отправьте мне. Сначала попробуйте статический анализатор Никиты Жука.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...