Решил создать отдельную тему, чтобы не флудить оффтопом в соседней.
По наводке 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, спасибо тебе, что убедил попробовать эти штуки.)
Здравствуйте, Кузнец, Вы писали:
К>Во все 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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)