Подтвердить что ты не робот

Дезинфицирующее средство для клан-памяти; как сделать это.

Я компилирую свою программу с помощью clang++ -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -O0, и когда я ее запускаю, вывод:

[email protected]:~/projects/json++11/build$ ./tests 
.......==10534== WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7fe7602d4a51 (/home/matiu/projects/json++11/build/tests+0x106a51)
    #1 0x7fe7602dfca6 (/home/matiu/projects/json++11/build/tests+0x111ca6)
    ...
    #31 0x7fe75edbaec4 (/lib/x86_64-linux-gnu/libc.so.6+0x21ec4)
    #32 0x7fe7602808dc (/home/matiu/projects/json++11/build/tests+0xb28dc)

  Uninitialized value was created by a heap allocation
    #0 0x7fe76026e7b3 (/home/matiu/projects/json++11/build/tests+0xa07b3)
    #1 0x7fe7602ee7da (/home/matiu/projects/json++11/build/tests+0x1207da)
    ...
    #18 0x7fe7602c1c4c (/home/matiu/projects/json++11/build/tests+0xf3c4c)
    #19 0x7fe7602873fa (/home/matiu/projects/json++11/build/tests+0xb93fa)

SUMMARY: MemorySanitizer: use-of-uninitialized-value ??:0 ??
Exiting

Как я могу отобразить строки строк, например, в красивых примерах: http://clang.llvm.org/docs/MemorySanitizer.html

Я подозреваю, что это может быть невозможно, потому что моя праграмма является одной гигантской вложенной связкой лямбда: https://github.com/matiu2/json--11/blob/master/tests.cpp

4b9b3361

Ответ 1

С помощью дезинфицирующего средства для адреса я заметил, что мне нужно было определить эти переменные среды:

  • ASAN_OPTIONS=symbolize=1 (требуется только при компиляции с помощью GCC > 4.8) и
  • ASAN_SYMBOLIZER_PATH=$(which llvm-symbolizer) Я думаю, что символизатор - это то, что вы ищете. Он преобразует символы в имена файлов с номерами строк и столбцами.

На веб-сайте проекта детектора детектора памяти он гласит:

символизация

Установите переменную среды MSAN_SYMBOLIZER_PATH в путь к llvm-symbolizer binary (обычно с LLVM). MemorySanitizer будет использовать его, чтобы символизировать отчеты "на лету".

Итак, вам нужно MSAN_SYMBOLIZER_PATH установить аналогично ASAN_SYMBOLIZER_PATH.