Я работаю над средними (~ 20k строк кода, Objective-C, смешанными с C++), и я figthing, чтобы выследить ошибку EXC_BAD_ACCESS.Отслеживать доступ за пределы экрана на iPhone
Я пробовал все распространенные методы (например, включение NSZombie, защитные ребра и т. Д.). До сих пор я исключил возможность доступа к выпущенному объекту и двойную ошибку.
Кажется, что что-то пишет на пространстве памяти, где оно не должно. Но, как и многие ошибки памяти, это не происходит постоянно, и это не сбой всегда в одном и том же месте. (Иногда я получаю сообщение «объект был изменен после освобождения»).
Иногда перезаписываемая память относится к распределителю , и он падает на malloc или на free().
И, конечно, некоторые изменения в приложении могут влиять на поведение ошибки - если я пытаюсь прокомментировать части кода, ошибка появляется реже, поэтому ее сложнее найти.
Наконец, я изучал использование valgrind, но кажется, что все, кто его использовал, работали на симуляторе. но мой код должен работать на реальном устройстве (некоторые коды ARM -специфических)
Есть ли какие-либо общих советы о том, как отлаживать такие ошибки?
Примечание: приложение включает в себя обработку видео, поэтому объем используемой памяти довольно большой.
Если используемая память довольно велика, вы видите, как выглядит ваш пейзаж памяти, если вы получаете предупреждение о низкой памяти? В таком случае ОС будет выгружать что-либо не на экране. У вас может быть проблема. Я полагаю, вы не используете ARC? – jmstone617
Я не получаю предупреждений о памяти, а «довольно большой» означает десяток МБ, а не 100 МБ. Но что такое ARC? Автоматический пересчет? Если да, ответ - нет. Я использую shared_ptr для большинства кода на C++ и простые указатели для ObjC – Sam
Получаете ли вы трассировку стека при сбое, если вы запустили ее в отладчике? – JeremyP