Как «установить точку останова в malloc_error_break для отладки»

126

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

malloc: * ошибка для объекта 0xc6a3970: освобождаемый указатель не был выделен * установить точку останова в malloc_error_break для отладки

Как узнать, какой объект или переменная затронута?

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

введите описание изображения здесь

openfrog
источник
1
Я решил эту проблему, отключив проверку сафари. stackoverflow.com/a/43885754/6521116
Крис Руф
Одной из причин этого является функция / метод, который должен возвращать объект, достигает конца функции и ничего не возвращает.
Xofo

Ответы:

136

Установите точку останова на malloc_error_break (), открыв навигатор точки останова (Вид-> Навигаторы-> Показать навигатор точки останова или ⌘7), нажав кнопку «плюс» в нижнем левом углу и выбрав «Добавить символическую точку останова». Во всплывающем окне введите malloc_error_breakв поле «Символ» и нажмите «Готово».

РЕДАКТИРОВАТЬ: openfrog добавил снимок экрана и указал, что он уже безуспешно пробовал эти шаги после того, как я опубликовал свой ответ. После этого редактирования я не знаю, что сказать. Я сам не видел, чтобы это сработало, и действительно, я всегда устанавливаю точку останова на malloc_error_break.

Эндрю Мэдсен
источник
2
У меня это сработало (без модуля). Причиной проблемы для меня было то, что у меня была UIImageрезервная копия файла, и я перезаписывал файл другим изображением. Это вызвало ошибку, когда я вызвал UIImagePNGRepresentationисходное изображение (а не когда файл был фактически перезаписан).
Роберт
1
У меня не появляется кнопка плюса в нижнем левом углу ⌘7панели ... Возможно, вы имели в виду ⌘8?
ScottyBlades
@ScottyBlades догадывается, что ярлык изменился. Я написал этот ответ 8 лет и 7 основных версий Xcode назад ...
Эндрю Мэдсен,
@AndrewMadsen Не беспокойтесь, просто проверьте, есть ли смысл редактировать.
ScottyBlades
46

На скриншоте вы не указали ни один модуль: попробуйте установить libsystem_c.dylib

введите описание изображения здесь

Я так и сделал, и это работает: здесь останавливается точка останова (хотя трассировка стека часто возникает из какой-то непонятной системной библиотеки ...)

Vinzzz
источник
7
Похоже , имя модуля отличается прошивкой, это: libsystem_malloc.dylib. Точка останова у меня работает без указания модуля.
Нестор
6

У меня была такая же проблема с Xcode. Я выполнил шаги, которые вы дали, и это не сработало. Я сошел с ума, потому что на каждом форуме, который я видел, все ключи к разгадке этой проблемы - те, которые вы дали. Наконец-то я увидел, что поставил пробел после malloc_error_break, подавил его, и теперь он работает. Глупая проблема, но если решение не сработает, убедитесь, что вы не оставили места до и после malloc_error_break.

Надеюсь, это сообщение поможет ..

Себастьен
источник
4

Я дал разрешения, которые мне не нужно было писать в некоторых папках (особенно / usr / bin /), и это вызвало проблему. Я исправил это, открыв Дисковую утилиту и запустив «Восстановить права доступа к диску» на диске Macintosh HD.

user3843991
источник
Спасибо, это исправило мою неисправную машину.
Мэтт Флетчер
2

Я решаю это близким инспектором сафари. Обратитесь к моему сообщению . Я также иногда обнаруживал звук, когда я запускаю свое приложение для тестирования, затем я открываю сафари с включенным автоматическим инспектором, после этого я выполняю некоторые действия в своем приложении, после чего возникает эта проблема.

введите описание изображения здесь

Крис Руф
источник