Сборники трудов ИСП РАН


Поиск состояний гонки в программах на языке Java при помощи динамического анализа

М. К. Ермаков (ИСП РАН, Москва, Россия)
С. П. Вартанов (ИСП РАН, Москва, Россия)

Аннотация

Язык программирования Java обладает встроенными средствами поддержки многопоточного выполнения программ. Из-за ошибок при создании подобных программ в процессе выполнения могут возникать ошибки синхронизации, одной из которых является возникновение состояния гонки между потоками, которые осуществляют доступ к разделяемому ресурсу (как минимум один поток модифицирует ресурс) и порядок работы потоков с ресурсом не фиксирован. В статье рассматривается подход к поиску состояний гонки при помощи динамического анализа. Преимущества динамического анализа по сравнению со статическим заключаются в отсутствии ложных срабатываний при определённых ограничениях, накладываемых на анализируемую программу. Для проведения динамического анализа предлагается использовать статическую инструментацию байт-кода программы, которая позволяет в ходе выполнения программы извлекать информацию о выполнении инструкций и методов, осуществляющих работу по синхронизации потоков. Построенная трасса представляет собой модель конкретного выполнения программы. На её основе с помощью отношений предшествования и механизма отслеживания блокировок определяется, возможна ли ситуация, при которой возникает состояние гонки. Для инструментации с целью сбора трассы используется инструмент динамического анализа Coffee Machine. Статическая инструментация, используемая в инструменте, позволяет проводить анализ программ на виртуальных машинах, не предоставляющих интерфейс для динамической инструментации. Анализ построенной модели и поиск потенциальных состояний гонки осуществляется при помощи инструмента ThreadSanitizer Offline. Благодаря использованию инструментации байт-кода наличие связи с исходным кодом для проведения анализа не является необходимым, однако это позволяет более точно определить причины возникновения ошибки. Реализация была проверена на ряде проектов с открытым исходным кодом и продемонстрировала свою эффективность для поиска состояний гонки.

Ключевые слова

динамический анализ, состояния гонки, ошибки синхронизации

Издание

Труды Института системного программирования РАН, том 27, вып. 2, 2015, стр. 39-52.

ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).

DOI: 10.15514/ISPRAS-2015-27(2)-3

Полный текст статьи в формате pdf Вернуться к содержанию тома