Как настроить вывод отчетов ASAN/UBSAN

Я хотел бы запустить мой пакет модульных тестов с -fsanitize=address,undefined и все ошибки дезинфицирующего средства должны быть записаны в report.txt файл. По умолчанию все ошибки дезинфицирующего средства записываются в стандартный вывод, однако программное обеспечение также записывает информацию в стандартный вывод, что затрудняет обнаружение ошибок. Я старался:

export ASAN_OPTIONS="log_path=asan.log"
./mytests

И я также попытался вызвать C API перед запуском тестов:

#include <sanitizer/asan_interface.h>

__sanitizer_set_report_path("/tmp/asan.log")

Однако ни один из них не работает, все ошибки просто записываются на стандартный вывод. Я использую тестирование Debian:

root@94e239ad460a:~# gcc --version
gcc (Debian 6.1.1-11) 6.1.1 20160802
Copyright (C) 2016 Free Software Foundation, Inc.

Есть ли какой-нибудь альтернативный метод, где я могу сохранить ошибку дезинфицирующего средства из моих модульных тестов где-нибудь?

2 ответа

Хм, я успешно использовал log_path много раз. Если это не работает для вас, пожалуйста, сообщите об ошибке в ASan github (желательно с минимальным воспроизведением).

Я понимаю, что у моих двоичных файлов не было разрешений на чтение. Простойchmod 500 <exe_path> решил мою проблему.

Что я всегда делаю, так это чтобы убедиться, что каталог существует. Вы можете использовать Qt:

QDir().mkpath("/tmp");

Асан добавит PID к вашему имени файла, и я не думаю, что вы можете отключить это.

В моем common_interface_defs.h есть только __sanitizer_set_report_path но я вижу, что мастер gcc имеет более новую функцию, где вы передаете дескриптор файла:

void __sanitizer_set_report_fd(void *fd);

Вы можете проверить, имеет ли gcc / clang вашей платформы более новую функцию для установки дескриптора файла.

Другие вопросы по тегам