Address/memory/thread sanitizer.
Попробовал address/memory/thread sanitizer, очень заинтересовали данные штуки, ибо работают намного шустрее valgrind'а. Работаю в среде Qt, поэтому всё далее будет применительно к ней
Address sanitizer.
Во все pro файлы добавляем строки
QMAKE_CXXFLAGS += -fsanitize=address
QMAKE_LFLAGS += -fsanitize=address
Первое — флаг компиляции, второе — флаг линковки.
Теперь собираем проект и запускаем. Лучше запускать в консоли, тогда будет разноцветный вывод, который будет показывать ошибки. Разницы в выводе при сборке в debug и в release версии не увидел, по-видимому ошибки будут показаны не в какой инструкции, а лишь в какой функции, что огорчает, но это лучше, чем ничего.
При возникновении ошибки приложение упадёт и в логе мы увидим описание ошибки.
Thread sanitizer.
Во все pro файлы добавляем строки
QMAKE_CXXFLAGS += -fsanitize=thread
QMAKE_LFLAGS += -fsanitize=thread
QMAKE_CXXFLAGS += -fPIE
QMAKE_LFLAGS += -fPIE
QMAKE_CXXFLAGS += -pie
QMAKE_LFLAGS += -pie
Собираем проект и запускаем, всё аналогично предыдущему. У нас в проекте сразу полетели ошибки data race, но я пока не смог разобраться, как анализировать полученные логи (там есть красные, синие, жёлтые, зелёные и прочих цветов сообщения, пока даже понять, какие именно потоки race'ятся не ясно).
Ну и напоследок memory sanitizer.
Во все pro файлы добавил строки
QMAKE_CXXFLAGS += -fsanitize=memoryи получил ошибку:
QMAKE_LFLAGS += -fsanitize=memory
error: unrecognized argument to -fsanitize= option: 'memory'
Вопрос — как собраться с этим санитайзером? Пока непонятно.
Комментариев нет:
Отправить комментарий