Як "встановити точку розриву в malloc_error_break для налагодження"


126

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

malloc: * помилка для об'єкта 0xc6a3970: покажчик, що звільняється, не виділявся * встановити точку перелому в malloc_error_break для налагодження

Як я можу дізнатися, на який об’єкт чи змінну впливає?

Я спробував встановити символічну точку розриву, як це, але вона ніколи не зупиняється:

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


1
Я вирішую це питання, відключивши перевірку сафарі. stackoverflow.com/a/43885754/6521116
Kris Roofe

Однією з причин цього є функція / метод, який повинен повернути об'єкт, і він доходить до кінця функції і нічого не повертає.
Xofo

Відповіді:


136

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

EDIT: openfrog додав скріншот і вказав, що вже провів ці кроки без успіху після того, як я опублікував свою відповідь. З цією редакцією я не впевнений, що сказати. Я не бачив, щоб це не спрацювало самостійно, і я дійсно завжди зберігаю точку розриву на наборі malloc_error_break.


2
Це працювало для мене (без модуля). Причиною проблеми для мене було те, що я створив UIImageрезервну копію файлу, і я перезаписав файл з іншим зображенням. Це спричинило помилку, коли я закликав UIImagePNGRepresentationоригінальне зображення (не тоді, коли файл був фактично перезаписаний).
Роберт

Я не отримую кнопку плюс у лівому нижньому куті ⌘7смуги ... Можливо, ви мали на увазі ⌘8?
ScottyBlades

@ScottyBlades здогадуючись, ярлик змінився. Я написав цю відповідь 8 років і 7 основних версій Xcode тому ...
Ендрю Мадсен

@AndrewMadsen Не хвилюйтесь, просто перевірте, чи є сенс редагувати.
ScottyBlades

46

На екрані екрана ви не вказали жодного модуля: спробуйте встановити "libsystem_c.dylib"

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

Я зробив це, і це працює: точка зупинки зупиняється тут (хоча часто стежка часто піднімається з якихось неясних системних ліб ...)


7
Схоже , ім'я модуля відрізняється прошивкою, це: libsystem_malloc.dylib. Breakpoint працює для мене, не вказуючи модуль.
Нестор

6

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

Сподіваюся, це повідомлення допоможе ..


4

Я дав дозволи, я не повинен був писати в деякі папки (особливо / usr / bin /), і це спричинило проблему. Я виправив це, відкривши Disk Utility і запустивши «Відновити дозволи на диск» на Macintosh HD диску.


Дякую, це виправило мою розбиту машину.
Метт Флетчер

2

Я вирішую це за допомогою близького інспектора сафарі. Зверніться до моєї публікації . Я також іноді знаходжу звук, коли запускаю свою програму для тестування, тоді я відкриваю сафарі з автоінспектором, після цього я виконую певні дії у своєму додатку, тоді ця проблема спрацьовує.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.