Странные утечки памяти, обнаруживающиеся в инструментах

#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 их создал — я проверю еще раз