Sanitizer'ы
От: Кузнец Россия  
Дата: 18.08.17 07:59
Оценка:
Решил создать отдельную тему, чтобы не флудить оффтопом в соседней.

По наводке Zhendos'а попробовал 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'


Вопрос — как собраться с этим санитайзером?

В целом инструменты очень интересные, я и не думал, что в нашем проекте столько ошибок. Если удастся научиться эти логи интерпретировать, то возможно сделаю немало фиксов неочевидных багов . (Zhendos, спасибо тебе, что убедил попробовать эти штуки.)
Re: Sanitizer'ы
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.08.17 08:06
Оценка:
Здравствуйте, Кузнец, Вы писали:

К>Во все pro файлы добавляем строки


К>
К>QMAKE_CXXFLAGS += -fsanitize=address
К>QMAKE_LFLAGS += -fsanitize=address
К>

про -fno-omit-frame-pointer забыл.

К>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'ятся не ясно).

читай внимательней.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Sanitizer'ы
От: MasterZiv СССР  
Дата: 24.08.17 14:03
Оценка:
Здравствуйте, Кузнец, Вы писали:

К>По наводке Zhendos'а попробовал address/memory/thread sanitizer, очень заинтересовали данные штуки, ибо работают намного шустрее valgrind'а. Работаю в среде Qt,


Какой бэкенд-то (тулсет) используешь ?
Короче, какие компиляторы это поддерживают?
А то ты не сказал...
Re[2]: Sanitizer'ы
От: Zhendos  
Дата: 24.08.17 18:43
Оценка: 2 (1)
Здравствуйте, MasterZiv, Вы писали:

MZ>Здравствуйте, Кузнец, Вы писали:


MZ>Короче, какие компиляторы это поддерживают?

MZ>А то ты не сказал...

clang и gcc
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.