valgrind, gcc 6.2.0 и -fsanitize=адрес

Недавно при компиляции с '-fsanitize=address' я получаю исключение выполнения при запуске приложения с valgrind, а именно

"Среда выполнения ASan не стоит на первом месте в исходном списке библиотек"

Я немного не знаю, что на самом деле делает valgrind. Команда «ldd file.exe» доставляет

    linux-gate.so.1 =>  (0xb7755000)
    libasan.so.3 => /usr/lib/i386-linux-gnu/libasan.so.3 (0xb7199000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6fdf000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6fd8000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb6fcf000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6fb2000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6f5c000)
    /lib/ld-linux.so.2 (0x80092000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6f3e000)

Любые подсказки?


person Frank-Rene Schäfer    schedule 06.02.2017    source источник
comment
Это работает с LD_PRELOAD=libasan.so?   -  person melpomene    schedule 07.02.2017
comment
Нет, при этом я получаю ОШИБКУ: ld.so: объект 'libasan.so' из LD_PRELOAD не может быть предварительно загружен (не удается открыть общий объектный файл): игнорируется.   -  person Frank-Rene Schäfer    schedule 07.02.2017
comment
А как насчет LD_PRELOAD=libasan.so.3 (а если не получится, то LD_PRELOAD=/usr/lib/i386-linux-gnu/libasan.so.3)?   -  person melpomene    schedule 07.02.2017


Ответы (1)


Вы не сможете запускать продезинфицированный код под Valgrind. Даже если вы решите проблему с предварительной загрузкой libasan, вы столкнетесь с конфликтующими требованиями к адресному пространству (например, при запуске Valgrind резервирует область памяти, которая также требуется теневой памяти Asan), и это нельзя обойти, поскольку оба адреса жестко запрограммированы в Valgrind и libasan. Аналогичные проблемы существуют для Asan и Tsan или Asan и Msan (т.е. они не могут быть включены одновременно). Это вряд ли будет исправлено, поскольку дезинфицирующие средства узкоспециализированы для достижения впечатляющих показателей эффективности.

person yugr    schedule 07.02.2017
comment
Да, удалив -fsanitize=address из CMAKE_CXX_FLAGS_DEBUG в моем проекте, Valgrind запустится правильно. Спасибо за ответ. - person korst1k; 10.05.2020
comment
@korst1k Обратите внимание, что ASan и Valgrind могут найти разные наборы ошибок, поэтому рекомендуется запускать набор тестов под обоими. - person yugr; 11.05.2020