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

Crash Dump Analysis - это просто огромная копилка знаний. Особенно порадовали паттерны ошибок в крэш дампах.
Также читаю и всем рекоммендую блог от Microsoft про debugging: http://blogs.msdn.com/ntdebugging/
Очень много информации про отладку и практических примеров на основе багов в 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 секунд, причем именно в месте ошибки, а не через полчаса после порчения памяти. Это был поворотный момент, когда я полюбил стресс-тесты и теперь всегда их использую.

Можно придумать еще кучу типов отладки, но главная мысль, что я хотел донести, думаю, понятна. "Отладка бывает разной. Надо использовать мощь инструментов, книг и блогов, чтобы научиться отлаживать максимально быстро и надежно.". Все, кто сетуют на сложность отладки в геймдеве (в том числе и я сам недавно) - они просто не видели остальных пунктов дальше первого…

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

Ответить

 

 

 

Вы можете использовать эти HTML тэги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>