Есть некоторая сложная поверхность в 3D прострастве (с т.з. физики - волновой фронт). Поверхность составлена из треугольников, треугольником может быть до неск млн.
У треугольников есть общие вершины (с т.з. физики - лучи, приближение геометрической оптики), и общие грани (стороны треугольников). В процессе расчета мы на шаг трассируем лучи, и затем некоторые грани приходится разбивать (при этом разбиваются и прилежащие к ним треугольники) или нетривиальным образом преобразовывать, или уничтожать (если вышли за пределы счетной области). В общем поверхность эволюционирует сложным образом.
Эта шляпа задается как двусвязный граф. Есть три типа узлов - лучи, грани и треугольники. Треугольник ссылается на грани и лучи. Грани ссылаются на прилежащие к ним треугольники. Лучи не ссылаются никуда - им и так хорошо.
Проблема в том, что при некоторых нетривиальных преобразованиях валится связность данных. У меня есть функция, отслеживающая связность данных, и иногда она говорит - опаньки... Но проблемы судя по всему начинаются раньше, т.е. некоторый участок фронта становится хитровыкрученным а потм уже гавкается.
Вопрос - как такие вещи отлаживаются вообще? Мне бы хотелось откатиться назад, но я не могу. Мне бы хотелось последить за эволюцией проблемного треугольника, но я заранее не знаю какой из них будет проблемным. Ошибка воспроизводима, но от этого пока не сильно легче...