我正在调试进程中的内存泄漏,为此使用了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
与启用unmap_shadow_on_exit=1
之间有很大的区别,但是我不完全了解它的作用,有关此文档的文档有些短(请参阅ASan options)。启用它会产生较大的字节数,而禁用它会产生很小的数字。我假设test-lib/gulpfile.js
意味着泄漏的对象包括它们的引用对象被汇总,而没有启用它只能汇总实际分配的大小。那是真的吗?在这种情况下,未映射阴影是什么意思?