Если вы можете воспроизвести сбой в симуляторе, вы можете рассмотреть возможность использования инструмента malloc_history
. (У него есть справочная страница.) Вам необходимо установить некоторые переменные среды: я обычно устанавливаю их через экран «Редактировать активный исполняемый файл» на панели «Аргументы», а затем использую флажки для их включения / выключения. Убедитесь, что вы отключили их перед отладкой на устройстве; если включено, программа попытается записать в /tmp
, что песочница не позволяет.
Я считаю, что этот инструмент в сочетании с NSZombie
позволяет мне отслеживать ошибки alloc / premature-release / access-after-dealloc. Как только NSZombie
сообщает о доступе к освобожденному объекту, вы можете использовать malloc_history
, чтобы определить, когда объект был выделен. Это обычно ставит меня на путь решения проблемы.
Еще один инструмент, который я нашел бесценным, - clang из проекта LLVM. Он все еще находится в разработке, но они регулярно выпускают двоичные файлы для MacOS-X, которые кажутся мне достаточно стабильными. В частности, он понимает политику управления памятью Какао. Использовать его так же просто, как:
% cd ${DIRECTORY_CONTAINING_XCODE_PROJECT}
% xcodebuild clean
% scan-build -V xcodebuild
Это сделает полную сборку вашего проекта и создаст отчет со списком любых очевидных ошибок (включая ошибки подсчета ссылок), которые обнаружит инструмент.