Лучшие блоги про отладку

Crash Dump Analysis — это просто огромная копилка знаний. Особенно порадовали паттерны ошибок в крэш дампах.
Также читаю и всем рекомендую блог от Microsoft про debugging. Очень много информации про отладку и практических примеров на основе багов в Windows.

Лучшие блоги про отладкуЧитаю я все эти блоги, книгу Advanced Windows Debugging, отлаживаю с помощью WinDbg, изучаю его потихоньку, и вспоминаю свое собеседование в F-Secure, когда я с пеной у рта доказывал, что я обожаю и умею отлаживать.

Те, кто меня собеседовал, сильно удивлялись и никак не могли поверить, что кто-то может любить это занятие. А я тогда просто не знал, что такое отладка. Сейчас, когда я уже научился основам, они посмеиваются надо мной и я тоже посмеиваюсь над собой-предыдущим.

Для меня 5 месяцев назад отладкой было вкратце: запустить игру под отладчиком в VisualStudio на своей машине, пройтись пошагово или поймать исключение, понять причину и исправить. Или изредка взять crash лог с call stack и попытаться понять ошибку по нему. Если call stack не сгенерился, то dmp файл я даже не пытался смотреть, ибо VisualStudio уж больно криво с ними работает.

Если выпадал BSOD, то я сразу грешил на драйвера видео — у меня и в мыслях не было пытаться понять причину самому, не говоря уже о том, чтобы ее исправить (а теперь могу — один такой баг уже закрыл).

Я не знал и не пытался узнать, как работает система в случае критической ошибки в программе или драйверах — что и куда она сохраняет, как это найти, как найти причину падения. Вот вы знаете, что Виста, да и другие WIndows умеют сохранять crash дампы сами при любом падении любой программы? Не надо писать свои дамперы — достаточно достать дамп из Windows.

Я не знал и не пытался узнавать про доступные тулзы, которые жутко упрощают весь процесс отладки (umdh, application verifier, userdump, офигительные тулзы sysinternals и т.п.).

Я думал, что отладка — это просто, и не знал, что отладка бывает разной

  1. Бывает отладка простой преимущественно однопоточной программы с приаттаченным дебаггером на локальной машине. Почти все игры на PC подпадают под это определение. И это самый простой вид отладки. Тут все понятно и просто.
  2. Чуть сложнее отлаживать удаленную машину, если к ней приаттачен дебаггер.
  3. Если программа содержит десятки рабочих потоков, то отлаживать ее пошагово в дебагере невозможно. Такие программы даже локально можно только по логам отлаживать. Или по крешдампам. Видел недавно отладку падения, которое иногда возникало при ночном стресс-тесте, когда 50 потоков качают порнографию из интернета и тестируют parental control. На отладку этого падения ушло 2 недели у одного из самых опытных программистов. Причину он нашел только собрав жуткие гигабайты логов и проанализировав их. Никакие креш дампы не помогали, т.к. была ошибка рандомной записи в память. И в итоге, причина оказалась не в его модуле. Всё, что он сделал через 2 недели — перенаправил ее с коментариями в другой отдел.
  4. Если отлаживается драйвер, то цена ошибки — BSOD. Цена остановки в дебаггере для драйвера — это freeze всей системы (из которого она фиг выберется в половине случаев). Тут вообще надо иметь джедайское терпение и много времени в запасе.
  5. Часто еще сложнее отлаживать ошибку, пришедшую от кастомеров, по набору crash дампов и логов. Такие ошибки исправляются от 5 минут до недель и месяцев. Иногда даже приходится ехать к кастомеру, чтобы видеть все своими глазами и исправлять-тестировать сразу на месте. Недавно я исправил ошибку, которая уже несколько лет радовала новыми дампами рандомных падений раз в месяц-два. Это было рандомное падение в одном из наших модулей. Исправил же я его воспользовавшись всеми перечисленными выше тулзами и блогами. Выставил все проверки на максимум, использовал дебажные бинарники, натравил на модуль userdump и gFlags, сделал специальный стресс-тест и оставил работать на ночь… и ничего :) еще раз на ночь… опять ничего… а потом усилил стресс-тест, запустил в третий раз и поймал ошибку через 10 секунд, причем именно в месте ошибки, а не через полчаса после порчения памяти. Это был поворотный момент, когда я полюбил стресс-тесты и теперь всегда их использую.

Можно придумать еще кучу типов отладки, но главная мысль, что я хотел донести, думаю, понятна.

«Отладка бывает разной. Надо использовать мощь инструментов, книг и блогов, чтобы научиться отлаживать максимально быстро и надежно.».

Все, кто сетуют на сложность отладки в геймдеве (в том числе и я сам недавно) — они просто не видели остальных пунктов дальше первого…

Я пока только учусь этому, но мне нравится…

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