Что на самом деле делает unmap_shadow_on_exit от ASan?
Я отлаживаю утечку памяти в процессе, и я использую AddressSanitizer для этого. Я установил флаги на мою сборку, чтобы получать отчеты об утечках и запускаю с ASAN_OPTIONS=detect_leaks=1:unmap_shadow_on_exit=1 ./dostuff
, Это дает мне вкусные сообщения, как это:
Direct leak of 1728 byte(s) in 24 object(s) allocated from:
#0 0x109e8b48c in wrap_malloc (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x5d48c)
#1 0x121d2b89d in moz_xmalloc mozalloc.cpp:83
...
Я заметил большую разницу между отключением / включением unmap_shadow_on_exit
, но я не до конца понимаю, что он делает, документация немного короткая (см. параметры ASan). Включение дает большие байтовые числа, а отключение - очень маленькие. Я предполагаю что unmap_shadow_on_exit=1
означает, что объекты с утечкой суммируются, включая объекты, на которые они ссылаются, и, если они не включены, только суммируют размер фактического выделения Это близко к истине? Что означает unmap shadow в этом контексте?