Анатомия ThreadSanitizer

RU

В докладе рассмотрим основные механизмы, используемые TSan для выявления ошибок совместного доступа к данным (aka data races).

Как обычно, посмотрим, как поддержка этого санитайзера реализована в компиляторе (clang и gcc), как меняется генерация кода при включении опции fsanitize=thread, и к чему это может привести.

Также посмотрим, как реализована поддержка TSan со стороны рантайма. Разберемся, почему TSan использует примерно в 10 раз больше адресного пространства, чем ASan. Нужно ли перевыбрать все используемые библиотеки с TSan или же можно включить TSan только для части исходников, и почему TSan не сочетается с ASan. Ну и, наконец, может ли TSan поймать deadlock.

Основная цель доклада — изжить магию из TSan'a. После доклада слушатели будут понимать основные принципы работы TSan, знать когда и как его можно применять, а когда его применение бесполезно, или даже вредно.