2016-04-13 2 views
0

Я недавно начал использовать XCode AddressSanitizer, который, как мне кажется, был представлен в XCode 7 (см., Например, Apple WWDC presentation), чтобы помочь с трудной для поиска странной ошибкой. Sanitizer действительно обнаружил проблему, но мне сложно интерпретировать, что это значит.Интерпретация результатов XCode AddressSanitizer

Вы знаете, какой тип ошибок может сообщить AddressSanitizer и объяснить их?

В моем конкретном случае, ошибка будет глубоко внутри IOS библиотек, в конечном счете, происходящий из моего кода:

[CATransaction commit]; 

сообщил об ошибке:

==820==ERROR: AddressSanitizer failed to allocate 0x4b8000 (4947968) bytes of LargeMmapAllocator (error code: 12) 
==820==Process memory map follows: 
    0x0193820000-0x019383d000 /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib 
    0x019fb17000-0x019fb17020 /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib 

    ... very long list of mapped memory ... 

==820==End of process memory map. 
==820==AddressSanitizer CHECK failed: /Library/Caches/com.apple.xbs/Sources/clang/clang-703.0.29/src/projects/compiler-rt/lib/sanitizer_common/sanitizer_common.cc:181 "((0 && "unable to mmap")) != (0)" (0x0, 0x0) 
ERROR: Failed to mmap 
AddressSanitizer report breakpoint hit. Use 'thread info -s' to get extended information about the report. 
(lldb) thread info -s 
thread #1: tid = 0x993ca, 0x0000000100994010 libclang_rt.asan_ios_dynamic.dylib`__asan::AsanDie(), queue = 'com.apple.main-thread' 

Кто-нибудь знает, что это специфическая ошибка означает?

+0

Просто взглянув на него, кажется, что у вас закончилась память. Это возможно? – matt

+0

«commit» тоже интересен: это не очень обычная вещь. – matt

+0

Ага, вы имеете в виду, что сам AddressSanitizer вызывает эту ошибку, потому что ей нужно выделить гораздо больше памяти? Это может иметь смысл, но это не проблема памяти, которую я пытался найти. – fishinear

ответ

1

AddressSanitizer использует специализированный распределитель памяти, и в этом конкретном случае у него заканчивается память. Это не обязательно означает проблему в самой ASan или вашей программе.