Archive for the ‘debugging’ Category.

Best tools no one uses: DOT (овалы со стрелками)

Иногда при копании в текстовых файлах, в которых хранится дерево зависимостей или граф, хочется получить наглядное представление этого файла.  Это могут быть зависимости между данными или промежуточное состояние программы при отладке сложного алгоритма на графе/дереве.
Есть простой инструмент, DOT language, который по текстовому файлу сгенерирует рисунок.
Например, по описанию

digraph graphname {
  a -> b -> c;
  b -> d;
}

будет построен рисунок:

Continue reading ‘Best tools no one uses: DOT (овалы со стрелками)’ »

Сказ про то, как American Chopper сам восстановился

А я вот вчера вечером решил поностальгировать и поставил себе на домашний комп American Chopper. Не, на самом деле, конечно, я хотел кое что в нем посмотреть, но будем считать это простой ностальгией. Проект уже старенький, 5 лет прошло, к тому же он (сейчас это уже хорошо видно) цинично спортирован с PS2 версии с самыми минимальными переделками. Но речь сейчас не об этом.

В Крейтовском коде еще с прошлого века существовал блок функций SetIdle()/ClearIdle()/IsIdle(). Эти функции предназначены для работы с режимом паузы. SetIdle() увеличивает счетчик паузы, ClearIdle() – уменьшает. Если счетсик равен 0, игра находится в рабочем состоянии. Если > 0, игра находится в режиме паузы. Внутриигровое меню, например, на конструкторе ставит режим паузы, на деструкторе ее снимает. Железобетонно? Вроде как да.

Continue reading ‘Сказ про то, как American Chopper сам восстановился’ »

Теория ошибок. Нестабильности второго рода.

Про нестабильности второго рода можно говорить долго и упорно, большая часть серьезных багов в приложениях связана именно с ними. Причиной этого является то, что если нестабильности первого и третьего рода зачастую являются легко детерминируемыми программистскими ошибками, то нарушения порядков вызовов намного чаще связываются с активностью пользователя, внешними hardware-events, синхронизацией или проблемами с файлами данных. Но обо всем по порядку.

Continue reading ‘Теория ошибок. Нестабильности второго рода.’ »

Best tools noone uses: PREfast

Начитавшись про правильные практики, наконец заставил себя ознакомиться со словом PREfast и вообще статическими анализаторами.

В отличие от других тулзов из сериала, про которые просто мало кто слышал – PREfast вдобавок неплохо спрятан, и, мнэээ, несколько неказуален в применении. Поэтому вдобавок расскажу – где брать, как применять.
Continue reading ‘Best tools noone uses: PREfast’ »

Рецепты отладки. Падение на ровном месте.

В развитие рассказа CEMEH про страшный олдскульный WIC хочу рассказать историю, которая смогла успешно разрешиться только благодаря точу, что традиционные методы отладки были совмещены с хорошим пониманием принципов работы целевой платформы, роль которой успешно исполнил интеловский процессор, работающий в защищенном режиме под управлением операционной системы MS Windows.

В самом начале XXI века, во времена разработки “Недетских Гонок”, было зафиксировано странное падение, которое долго не удавалось исправить. Падение проявлялось только в Release конфигурации, проявлялось крайне редко, и, как тогда казалось, было просто на ровном месте.

Continue reading ‘Рецепты отладки. Падение на ровном месте.’ »

Рецепты отладки. Компилятор или программист?

При отладке этого бага в какой-то момент времени у меня даже появилась уверенность, что я имею дело с багом компилятора, а не с программистской ошибкой. Тем не менее, бага была найдена, работоспособность программы в Release конфигурации восстановлена, а репутация компилятора MSVC осталась {пока что} “непокобелимой”.

Continue reading ‘Рецепты отладки. Компилятор или программист?’ »

Рецепты отладки. Потеряный малок.

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

Начиналась эта история с обычного, не предвещавшего ничего плохого, запуска игры на PS2. Однако после первого заезда и попытки перезагрузки уровня обнаружилось, что оперативная память кончилась. Так началась еще одна длительная история отладки приложения.

Continue reading ‘Рецепты отладки. Потеряный малок.’ »

Рецепты отладки. Четырехмесячный дебаг.

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

Continue reading ‘Рецепты отладки. Четырехмесячный дебаг.’ »

Рецепты отладки. Return в пустоту.

Сегодня речь пойдет про отладку некоторых проблемных событий, на которые я получаю частый ответ типа “а хз где сдохло, висим на нулевом адресе, stack frame нету, сделать ничего не могу”.
Continue reading ‘Рецепты отладки. Return в пустоту.’ »