вторник, 16 марта 2010 г.

Отладки, мысли


Сегодня поймал момент озарения!

Вчера с обеда, да и сегодня пол-дня провел за ловлей бага. Бага настолько оказалась неинтересной, что аж в сон клонило...

Вообщем, вчера посмотрел на патч с новой фичей, но реализаця была не труЪ -- решил сделать по-своему. Сделал. Не работает. Там чуть подправил, там изменил, тут улучшил, там исправил -- не работает. Отложил на следующий день, т.е. на сегодня. Сегодня там подправил, тут исправил, здесь упростил -- не работает. Причем ошибка одна и та же, как будто все что я делаю никакого смысла не имеет. Решил проверить исходный патч.. Ха! И он не работает! Ну хоть бы я такой тупой, как уже было подумал!

Ладно, теперь про озарение. Фича добавляла учет периодических границ в портрет матрицы. А тестировался я в "камамбере".



Как видно, в угловом элементе две грани являются периодическими, причем отображаются одна в другую. И периодические соседи угловых ячеек являются этими же ячейками. Получается, что у угловой ячейки только один физический сосед и два фиктивных.

Ладно, ладно, вот теперь уже про озарение. Вообщем, в высоту 20 ячеек. А вылет был по assert'у, где сравнивались два числа. Что это за числа -- я хз! Модуль не мой, код мне абсолютно не понятен! Но (вот-вот озарение). Смотрю я на эти два числа (41771 и 41811), думаю "а насколько же они отличаются?" (40). 40 = 2*20, 20 ячеек, 2 фиктивных соседа у каждой.. Все! Озарение! Ошибка в подсчете ненулевых элементов!

Забавно отловить такой момент. Забавно сейчас анализировать. Например, почему я отловил этот момент? А потому что я почувстовал что сейчас найлу ошибку в момент "а насколько же...", т.е. до подсчета разницы. Забавно... Ну и приятно ^___^

Комментариев нет:

Отправить комментарий