Вопрос

Я пытаюсь найти утечки с помощью инструментов, но я вижу утечки, подобные тем, которые показаны на следующем рисунке:

  

утечки

Как вы можете видеть, нет никакой информации о том, какая строка кода имеет утечку. Все утечки, которые у меня есть, около 20, похожи на это, или другими словами, утечки не показывают какую-либо строку моего кода в частности.

Утечка на этом рисунке связана с " _CFAllocatorSystem " (???) на CoreFoundation, и у меня есть другие, которые просто говорят GSEvent. Я понятия не имею, что их порождает.

Как я могу это обнаружить?

спасибо за любую помощь.

Это было полезно?

Решение

Я думаю, что вы хотите войти в инструменты после запуска в режиме утечки и выбрать " Source View " ;. Затем вам нужно перетащить ваши исходные файлы в окно инструмента. Затем он покажет строки в коде, где происходит утечка, вместе со стеком вызовов.

Из-за того, что мой код сбрасывает код, происходит утечка. В инструментах это выглядит так: alt text http://img688.imageshack.us/img688/9669/screenshot20091028at131.png

Другие советы

То, что Leaks показывает вам, это трассировка кода, который выделил объект утечки (это означает, что он сохраняется, но в вашем приложении не осталось переменных с таким адресом). То, что он не показывает вам, это то, где объект должен был быть выпущен, чтобы не вызвать утечку, потому что это невозможно знать (можно найти, где в данный момент вызывается выпуск, но это может быть не очень полезно). / р>

Итак, этот след говорит мне о том, что некоторая часть памяти, выделенная системой, остается у вас, а затем ссылка забывается - одним из ключей является " PurpleEvent " строка, которая является общей в потоке, имеющем дело с событиями таймера или возможно уведомлениями Возможно, вы получили уведомление и что-то скрыли от него, не отпуская его позже.

Если вы знаете, в какой момент происходит утечка, вы сможете определить, какой код выполняется в течение этого времени.

См. здесь и особенно эту цитату:

Этот список информирует вас о типах, размерах, адресах и даже их стеках вызовов.

Затем вы можете отследить источник просочившихся воспоминаний через стеки вызовов.

Трассировка стека показывает, какая именно строка является виновной. Видимо строка 14 в main.m в вашем случае. Не знаете, что вас смутило?

Виновным был акселерометр, и я компилирую для OS 3.0.

Другими словами, акселерометр, который Apple сказал, что его утечки были исправлены, все еще течет как ад.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top