Xcode 4: не могу использовать Enable Guard Malloc из-за ошибки dylib для симулятора iPad - PullRequest
6 голосов
/ 14 октября 2011

В Xcode 4.x я отредактировал свою схему Run на «Enable Guard Malloc», так как у меня есть неописуемая ошибка malloc, которую мне нужно отследить. Я знаю, что мне нужно запустить симулятор, чтобы использовать эту функцию. Тем не менее, когда я это делаю, приложение сразу же зависает, и XCode показывает мне трассировку стека, которая выглядит следующим образом:

Stack trace in Xcode 4.x

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

DYLD_INSERT_LIBRARIES  ->  /usr/lib/libgmalloc.dylib

Однако это не решает проблему. Я также использовал в качестве значения 'lsystem', но это тоже не сработало.

Может кто-нибудь предложить решение этой проблемы с dylib, или, возможно, порекомендовать альтернативу «Включить Guard Malloc», чтобы определить, где область кучи malloc'd превышается?

UPDATE

Для пояснения, это тип ошибки, с которой я имею дело:

malloc: *** error for object 0x2b4b54: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

Я попытался установить точку останова символа на malloc_error_break, однако она все еще прерывается «случайно» при проблемах с памятью, а не в точке превышения выделенной области.

1 Ответ

2 голосов
/ 07 ноября 2011

Чтобы помочь с отладкой, вы можете установить MallocStackLogging , а затем в случае сбоя вашего приложения введите в консоли gdb:

(gdb) info malloc-history 0x543216

Замените 0x543216 адресом объекта, вызвавшего сбой, и вы получите намного более полезную трассировку стека, которая поможет вам точно определить строку в коде, которая вызывает проблему.

См. Эту статью для более подробных инструкций.

...