Clang++ 的泄漏清理器声称我在我的一个单元测试中存在内存泄漏。我倾向于相信它,但我无法通过检查找到它。
我正在使用以下选项进行编译:
/usr/bin/clang++ -std=c++14 -g -Wall -Wextra -pedantic -O0 -fuse-ld=gold -fsanitize=address
我得到的输出看起来像
=================================================================
==8611==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 8 byte(s) in 1 object(s) allocated from:
#0 0x54a650 (~/tmp/tests/utest-...+0x54a650)
#1 0x61bfc9 (~/tmp/tests/utest-...+0x61bfc9)
#2 0x55242f (~/tmp/tests/utest-...+0x55242f)
#3 0x550a01 (~/tmp/tests/utest-...+0x550a01)
#4 0x54f928 (~/tmp/tests/utest-...+0x54f928)
#5 0x5706fa (~/tmp/tests/utest-...+0x5706fa)
#6 0x55b8d9 (~/tmp/tests/utest-...+0x55b8d9)
#7 0x5e0914 (~/tmp/tests/utest-...+0x5e0914)
#8 0x5deae8 (~/tmp/tests/utest-...+0x5deae8)
#9 0x5c8bde (~/tmp/tests/utest-...+0x5c8bde)
#10 0x5b23fa (~/tmp/tests/utest-...+0x5b23fa)
#11 0x5a1ee9 (~/tmp/tests/utest-...+0x5a1ee9)
#12 0x56dcdf (~/tmp/tests/utest-...+0x56dcdf)
#13 0x566d57 (~/tmp/tests/utest-...+0x566d57)
#14 0x7f9fb622e60f (/usr/lib/libc.so.6+0x2060f)
(删除了不重要的信息)。
上面输出的问题是我得到的是内存地址而不是文件和行号,这样我就可以弄清楚泄露了什么!
根据谷歌 Clang 的 Chandler Carruth 的说法,启用调试输出 ('-g') 应该会导致堆栈跟踪中的内存地址被文件和行号替换。(您可以在此处具体看到他应用它。)正如您从我的编译标志中看到的那样,我正在发出调试信息。
知道我可能忽略了什么吗?