27 March 2014

Быстрый отладчик от Mozilla с записью и воспроизведением

Open sourceProgrammingDebugging
Mozilla выпустила инструмент, который наверняка многим облегчит жизнь: это фреймворк RR под Linux для записи и последующего воспроизведения хода выполнения программы. Воспроизведение происходит абсолютно детерминированно, то есть с теми же регистрами и адресами памяти — и неизменно с тем же сбоем (если он был). Другими словами, можно бесконечно гонять тесты, а как только появится баг — не спеша его изучить в офлайне, прокрутив запись сколько угодно раз. Записываются все деревья процессов и потоков.

RR создан для точного воспроизведения багов, которые проявляют себя непредсказуемо. В таких случаях при отладке стандартными средствами нет смысла запускать программу снова: не факт, что баг опять проявится. Эта проблема постоянно портит жизнь разработчикам. Вот почему в Mozilla решили создать такой фреймворк.

RR поднимает отладку на новый уровень: перед уходом на обед оставляете скрипт для тестов с разными параметрами, а к вашему возвращению RR запишет хотя бы одно выполнение с ошибкой. Можно прокрутить эту запись и понять, в чём проблема.

Теоретически, GDB тоже способен отмотать выполнение программы, но в реальности эта функция в RR реализована на порядок лучше. Главное, что удалось решить проблему с производительностью: воспроизведение программы происходит практически с той же скоростью, что и обычное исполнение, потому что RR записывает только изменяющиеся фрагменты и не трогает бóльшую часть программы.

На диаграмме показано, насколько отличается скорость записи и скорость воспроизведения записанной программы от её нативного исполнения (оверхед).


Относительно большой оверхед reftest объясняется тем, что текущая конфигурация Gecko для Linux работает через X-сервер

К сожалению, пока что дебаггер поддерживает только x86 32-битные процессы, но это ограничение наверняка снимут в будущих версиях. Ещё одно ограничение первой версии — эмуляция только одноядерной машины. Для записи параллельных вычислений не обойтись без аппаратной поддержки, так что от этого ограничения так просто не избавишься. И ещё, дебаггер пока работает только на процессорах Intel Ivy Bridge и Sandy Bridge.

Создание отладочного инструмента RR 1.0 заняло у разработчиков из Mozilla два года. Код на github.

Tags:GDBRRотладчикдебаггер
Hubs: Open source Programming Debugging
+48
9.9k 87
Comments 7
Full-stack JavaScript Developer
from 70,000 to 150,000 ₽Health SamuraiСанкт-ПетербургRemote job
Senior Frontend Engineer
from 160,000 to 220,000 ₽Jamakase TechnologiesRemote job
Junior Clojure Developer
from 70,000 to 150,000 ₽Health SamuraiСанкт-ПетербургRemote job
Senior ML Engineer
from 4,000 to 5,500 $HyprrRemote job
Backend-разработчик (Middle)
to 250,000 ₽ЛатераЗеленоградRemote job
Top of the last 24 hours