Preview

Труды Института системного программирования РАН

Расширенный поиск

Подход к проведению динамического анализа Java-программ методом модификации виртуальной машины Java

https://doi.org/10.15514/ISPRAS-2015-27(2)-3

Аннотация

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

Об авторах

М. К. Ермаков
Факультет вычислительной математики и кибернетики, Московский государственный университет им. М.В. Ломоносова
Россия


С. П. Вартанов
Факультет вычислительной математики и кибернетики, Московский государственный университет им. М.В. Ломоносова
Россия


Список литературы

1. L. Lamport. Time, Clocks, and the Ordering of Events in a Distributed System. Communications of the ACM, 21(7), 1978. pp. 558-565. doi: 10.1145/359545.359563

2. Java Thread Primitive Deprecation [HTML] (http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html)

3. K. Serebryany and T. Iskhodzhanov. ThreadSanitizer - data race detection in practice. Proceedings of the Workshop on Binary Instrumentation and Applications, 2009. pp. 62-71. doi: 10.1145/1791194.1791203

4. Apache Commons Byte Code Engineering Library [HTML] (http://commons.apache.org/bcel)

5. Bruneton E. ASM 4.0. A Java bytecode engineering library, 2011 [PDF] (http://download.forge.objectweb.org/asm/asm4-guide.pdf)

6. M. Eslamimehr, J. Palsberg. Sherlock: scalable deadlock detection for concurrent programs // Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering. 2014. P. 353-365

7. Nethercote N., Seward J. Valgrind: A framework for heavyweight dynamic binary instrumentation // PLDI. 2007.

8. C.-K. Luk, R. Cohn, R. Muth, H. Patil, A. Klauser, G. Lowney, S. Wallace, V. Janapa Reddi, K. Hazelwood. Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation // PLDI. 2005.


Рецензия

Для цитирования:


Ермаков М.К., Вартанов С.П. Подход к проведению динамического анализа Java-программ методом модификации виртуальной машины Java. Труды Института системного программирования РАН. 2015;27(2):39-52. https://doi.org/10.15514/ISPRAS-2015-27(2)-3

For citation:


Ermakov M., Vartanov S. Detecting race conditions in Java programs using dynamic analysis. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2015;27(2):39-52. (In Russ.) https://doi.org/10.15514/ISPRAS-2015-27(2)-3



Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


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