#objective-c #cocoa #xcode #memory-leaks #instruments
#objective-c #cocoa #xcode #утечки памяти #инструменты
Вопрос:
Каждые несколько недель я проверяю свое приложение на предмет утечек памяти с помощью instruments (действительно, потрясающий инструмент). Как вы можете видеть на скриншотах, в нем есть несколько утечек памяти. Раньше я игнорировал их, поскольку никогда толком не знал, почему они там были, и, похоже, они все равно не увеличивались.
Они создаются при запуске и исправны.. это все, что я о них знаю. У кого-нибудь есть идеи о том, как я могу выяснить, какая библиотека или часть моего кода вызывает эти утечки?
— спасибо
Комментарии:
1. Опубликуйте некоторый код, который вы используете, мы не являемся «Инструментами».
2. если бы я знал, какой код вызывал эти утечки, я бы это исправил, мое приложение состоит из 23 000 строк кода
Ответ №1:
Переключите представление на представление дерева вызовов и проверьте параметры Скрыть системные библиотеки и Скрыть отсутствующие символы в левой части.
Вы должны быть в состоянии увидеть трассировку стека, показывающую, откуда в вашем коде произошла утечка.
Если ничего не отображается, значит, верно одно из нескольких:
- утечка не по вашей вине и находится в одной из системных библиотек
- приложение не создано с использованием символов отладки
Убедитесь, что символы отладки не удаляются, и повторите попытку.
Если instruments по-прежнему ничего не показывает, снимите флажок Скрыть системные библиотеки, отметьте, где, по словам instruments, находится утечка, и сообщите об этом Apple по http://bugreport.apple.com
Ответ №2:
один из способов — прочитать обратные трассировки из расширенного подробного представления (cmd e)
Комментарии:
1. в нем говорится, что для этого блока недоступна трассировка стека
2. ОК. когда это происходит со мной, я проверяю, что объект собран с использованием символов отладки и что инструменты могут их найти (если они находятся в отдельном файле). иногда я делаю вывод, что программа является (или не является) моей, основываясь на том, что может быть обозначено (в окружающих фреймах).
3. не уверен, у меня были некоторые утечки до того, как я опубликовал их, но это точно показало, какой символ или метод objc их создал — я проверю еще раз