Дезинфектор утечки 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 в Google, включение отладочного вывода ('-g') должно привести к замене адресов памяти в трассировке стека номерами файлов и строк. (Вы можете увидеть, как он применяет это здесь.) Как видно из моих флагов компиляции, я высылаю отладочную информацию.
Любая идея, что я могу пренебрегать?
I hadn't realized that GCC uses clang on the back end
это неправда, просто люди из google реализуют для clang и gcc одинаковую функциональность, из-за этого они очень похожи, но это неправда, что gcc использует clang или clang использует gcc. Отмечаю как дубликат. - person fghj   schedule 10.11.2015