iOS libsystem_c.dylib утечка памяти strdup NSZombie не работает - PullRequest
8 голосов
/ 05 мая 2011

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

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

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

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

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

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

Ответы [ 2 ]

10 голосов
/ 05 мая 2011

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

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

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

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

5 голосов
/ 05 мая 2011

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

  1. Перейдите в Product -> Edit Scheme -> Run (Debug) -> Arguments.
  2. Добавьте это кпеременные окружения: MallocStackLoggingNoCompact
  3. Установите его на ДА
  4. Запустите и дайте ему сбой.
  5. введите в консоли (gdb) info malloc 0x4c8600 или любой другой адрес.
...