iOS libsystem_c.dylib strdup утечка памяти NSZombie не работает

Пожалуйста, помогите мне отследить утечку памяти iOS. Спасибо!

Я использую xCode 4.0.1, и я попытался активировать NSZombie для отслеживания утечки памяти, но, похоже, он не работает, как раньше, с xCode 3.x

Я не могу понять, откуда происходит утечка памяти, как указывает Instruments:

Утечка объекта -> Адрес GeneralBlock-32 -> 0x4c8600 Размер -> 32 байта Ответственная библиотека -> libsystem_c.dylib Ответственный кадр / вызывающий -> Strup

На данный момент я не знаю, правильно ли я использую Инструменты с NSZombie с xCode 4, поскольку он не показывает параметр NSZombie, когда я нажимаю «i» для получения дополнительной информации в разделе левый вариант Утечки.

НАБЛЮДЕНИЕ. Приложение для iPhone воспроизводит в реальном времени mms / wma, а также wma-аудио файлы с ограниченным промежутком времени. Утечка происходит только с конечным файлом wma, но работает отлично при воспроизведении из потокового источника без конечного времени.


person neowinston    schedule 05.05.2011    source источник


Ответы (2)


Во-первых, это malloc блок, а не объект. Зомби не будут работать (и никогда не работали бы в предыдущих версиях).

Сколько раз происходит утечка? Один раз? Не беспокойся об этом. Один раз на поток? сообщить об ошибке - этого нет в вашем коде из того, что вы опубликовали до сих пор (если только ваш код не вызывает strdup, что, безусловно, возможно, но нетипично для большинства приложений iOS, которые не интенсивно используют сторонние библиотеки ... . ты?)

В любом случае, если не происходит утечки 100 и 100 из 32-байтовых распределений во время выполнения вашего приложения, не беспокойтесь об этом (но, пожалуйста, сообщите об ошибке).

Как сказал Валкио, вы можете получить трассировку стека выделения напрямую из gdb (или из инструментов).

person bbum    schedule 05.05.2011
comment
Спасибо за твои соображения, бомж. Я отправлю отчет об ошибке. И да, я активно использую сторонние библиотеки: LibMMS (для анализа аудиопотока) и FFMPeg (для декодирования / воспроизведения) файла WMA. В таком случае, что мне искать? Потому что, когда я открываю второй поток, в конце первого потока мое приложение вылетает, когда я вручную останавливаю звук. Я сам не вызываю strdup, если только библиотеки, которые я использую, не делают этого. ОБНОВЛЕНИЕ: да, LibMMS вызывает Strup, когда устанавливает соединение mms. - person neowinston; 05.05.2011
comment
Отчет об ошибке, вероятно, не принесет вам много пользы, если он находится в сторонней библиотеке. Похоже на утечку в этой библиотеке. Сбой, вероятно, ортогонален (хотя он может сводиться к проблеме управления памятью в библиотеке) и заслуживает другого вопроса. - person bbum; 05.05.2011

Вы можете увидеть, где он был размещен, если сделаете это:

  1. Перейдите в Product -> Edit Scheme -> Run (Debug) -> Arguments.
  2. Добавьте это в переменные среды: MallocStackLoggingNoCompact
  3. Установите значение ДА.
  4. Беги, и пусть рухнет.
  5. введите в консоли (gdb) info malloc 0x4c8600 или другой адрес.
person vakio    schedule 05.05.2011
comment
Вы также можете сделать это в инструментах. Нет необходимости в gdb; щелкните адрес выделения в инструментах, и он покажет трассировку стека выделения. - person bbum; 05.05.2011
comment
Спасибо за ответ, вакио. Я сделал, как вы меня проинструктировали, и в (gdb), когда я набрал info malloc 0x464890, он дал мне следующий результат: MyAppName (330) ›Что означает это 330? - person neowinston; 05.05.2011
comment
Хм, это не так. У вас должен получиться стек malloc. Может быть, в этом случае инструменты сработают лучше ... - person vakio; 05.05.2011
comment
пожалуйста, взгляните на мой ответ bbum. Благодарю. - person neowinston; 05.05.2011
comment
У меня та же проблема, за исключением того, что она протекает с шагом 48 байтов вместо 32 байтов. Я использую iOS 5.1, и утечка, похоже, связана с прокруткой изображений UIScrollView. Утечка не кажется достаточно большой, чтобы слишком сильно беспокоиться, но все же я хотел бы знать, что я делаю не так. - person Jackson; 19.03.2012
comment
Кто-нибудь решил эту проблему с небольшими утечками malloc? У меня это сейчас, и когда эти ошибки накапливаются, мое приложение вылетает ... - person Sylphos; 20.11.2012