2016-03-29 8 views
3

Резюме: Я получил сообщение:Что такое команда «История памяти»?

AddressSanitizer debugger support is active. Memory error breakpoint has been installed and you can now use it in the 'memory history' command.

Что команда "memory history", и как именно его использовать?

Детали:

  • Я имел немного кода, который имел предупреждение памяти, что привело к аварии.
  • Я включил адрес Sanitizer, выбрав «Edit Scheme»> «Run»> «Enable Address Sanitizer».
  • После того, как он снова включил и снова запустил один и тот же код, аварии больше не произошло, но появилось сообщение.

Что это значит и что такое команда истории памяти? Как его использовать? Я искал, но я не нашел ничего, что могло бы ответить на мой вопрос.

+0

Не используйте изображения, в которых цитируемый текст будет достаточным, поскольку изображения не доступны для поиска. _and_ вопросы должны быть автономными. Если вы используете дополнительные изображения _non-essential_, не используйте сторонние хостинговые сайты. – dandan78

+0

Это отмечено, спасибо. – crentagon

ответ

5

Запуск под названием Sanitizer позволяет вам увидеть, как были выделены объекты. Команда memory history нужен указатель/адрес, и он покажет, как этот объект был выделен (исторический StackTrace о распределении):

(lldb) po self 
<MasterViewController: 0x61800000e080> 

(lldb) memory history 0x61800000e080 
    thread ... name = 'Memory allocated at' 
    frame #0: 0x00000001051bba97 libclang_rt.asan_iossim_dynamic.dylib`wrap_calloc + 199 
    frame #1: 0x00000001064362fd libobjc.A.dylib`class_createInstance + 84 
    frame #2: 0x0000000106440dc7 libobjc.A.dylib`_objc_rootAlloc + 41 
    frame #3: 0x00000001072d6d25 UIKit`-[UIClassSwapper initWithCoder:] + 175 
    frame #4: 0x00000001074c731b UIKit`UINibDecoderDecodeObjectForValue + 683 
    ... 

Он работает даже на уже высвобождены объекты, где он также показывает Deallocation трассировку! Это чрезвычайно полезно, когда вы случайно получаете доступ к уже освобожденному объекту.

Смежные вопросы