Как настроить вывод отчетов 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 вашей платформы более новую функцию для установки дескриптора файла.