0

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') 应该会导致堆栈跟踪中的内存地址被文件和行号替换。(您可以在此处具体看到他应用它。)正如您从我的编译标志中看到的那样,我正在发出调试信息。

知道我可能忽略了什么吗?

4

0 回答 0