0

Clang++ のリーク サニタイザーは、単体テストの 1 つでメモリ リークがあると主張しています。私はそれを信じたいと思っていますが、調べても見つかりません。

次のオプションでコンパイルしています。

/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)

(重要でない情報は削除されています)。

上記の出力の問題は、何がリークされているかを把握できるように、ファイル番号と行番号ではなくメモリ アドレスを取得することです。

Google で有名な Clang の Chandler Carruth によると、デバッグ出力 ('-g') を有効にすると、スタック トレースのメモリ アドレスがファイル番号と行番号に置き換えられるはずです。(具体的には、彼がそれを適用しているのをここで見ることができます。) コンパイル フラグからわかるように、デバッグ情報を出力しています。

私が何を無視している可能性がありますか?

4

0 に答える 0