Рекомендации по отладке
Обновлен: Ноябрь 2007
Ниже приведены рекомендации и способы отладки кода.
Обязательные действия
Научиться пользоваться средствами отладки.
Необходимо понимать, как работают средства отладки, и научиться пользоваться ими. Дополнительные сведения см. в разделе Отладка в Visual Studio.
Знать место архивации символов.
Символы по каждому продукту должны архивироваться на серверах символов. Необходимо только знать, где можно найти данные сервера. Дополнительные сведения см. в разделе об использовании сервера символов Microsoft в библиотеке MSDN.
Изучать и устранять ошибки, вызывающие зависание процессов.
Для пользователей приложение, которое перестает отвечать на запросы (зависает), является катастрофой. В любом случае работа пользователей потеряна, и необходимо начинать все сначала. Однако до недавнего времени считалось, что зависания очень трудно поддаются изучению и устранению. Доказано, что это не так для значительной доли зависаний процессов. Используйте последние средства и методики для устранения подобных проблем. Дополнительные сведения см. в разделе об устранении неполадок в программах в библиотеке MSDN.
Знать способы отладки малых дампов.
Большинство тестеров и заказчиков могут вызвать сбой кода без помощи какого-либо встроенного отладчика. Если воспроизвести проблему не удается, единственным вариантом, который остается, является малый дамп. Важно научиться проводить отладку кода при помощи малого дампа. Дополнительные сведения см. в разделе о файлах малого дампа в библиотеке MSDN.
Знать способы восстановления поврежденного стека.
Восстановление поврежденного стека — сложный процесс, но он имеет большое значение, поскольку множество сбоев в реальном мире происходит по вине повреждений в стеках. Дополнительные сведения см. в разделе об устранении распространенных неполадок в приложениях и отладке в реальном мире в библиотеке MSDN.
Нерекомендуемые действия
Полагать, что тестирование выявит все ошибки.
Тестирование никогда не может выявить всех ошибок. Это попросту невозможно. Код слишком сложен. Даже если в ходе тестирования будут обнаружены все ошибки, никогда не хватит времени, чтобы исправить все из них. Правильной стратегией является разработка продукта таким образом, чтобы в нем изначально не было ошибок. Избавьте себя от необходимости их последующего исправления. Следует взять на себя ответственность за качество своего кода. Группа тестирования всего лишь проверяет качество кода. Не надейтесь, что тестеры наведут порядок в созданном вами хаосе.
Рекомендуемые действия
Знать способы отладки многопоточных приложений.
Добавление потоков в приложение может привести к возникновению новых сбоев. Все действия по отладке приложений в однопоточной среде приобретают дополнительное значение при увеличении числа потоков. Например, не всегда удается уловить ошибку в месте ее возникновения. Как правило, ошибка выявляется позже, возможно, уже в другом потоке. В таких ситуациях даже нет возможности вернуться и просмотреть стек вызова, поскольку ошибка кроется в другом потоке и в другом стеке. Максимально упреждающее поведение будет способствовать процессу отладки в целом.
Научиться проводить удаленную отладку.
Удаленная отладка проводится при необходимости устранения проблемы, которая произошла на другом компьютере, с локального компьютера. Разработчики часто прибегают к удаленной отладке, когда определенный отрезок кода хорошо работает на локальном компьютере, но дает сбой в другой системе. В данном случае проблему в другой системе можно устранить удаленно, не тратя время на излишние перемещения. Дополнительные сведения см. в разделе Настройка удаленной отладки.
Научиться проводить отладку на действующих серверах.
Процедуры отладки выглядят иначе, когда отладка кода производится на действующем сервере, который используется заказчиками. Отладка на действующих серверах практикуется все чаще и чаще, поскольку большая часть кода пишется для Интернета. Дополнительные сведения см. в разделе об устранении распространенных неполадок в приложениях и отладке в реальном мире в библиотеке MSDN.
Комментировать все исправления ошибок.
При исправлении ошибки добавьте в код номер версии, идентификатор ошибки и свой псевдоним. Если другие люди будут просматривать код впоследствии и у них возникнет вопрос по данному исправлению, они смогут связаться с вами для получения дополнительных сведений.
Проверять все исправления ошибок.
Необходимо проводить проверку кода всех исправлений. Отдавайте код на проверку, по меньшей мере, еще одному лицу, т.е. организуйте проверку кода партнером.
Проверять исправления трудно выявляемых ошибок перед возвратом.
Избегайте повторного исправления одной и той же ошибки. Используйте построение, чтобы проверить, что исправление верно, особенно в случае с трудно выявляемыми ошибками.
Вносить все исправления ошибок в документ о тестовом выпуске.
Согласуйте свои действия с группой тестирования, внеся все исправления ошибок в документ о тестовом выпуске и отправив его группе тестирования по электронной почте.
Использовать сервер символов для индексации и архивации символов продукта.
Индексация и архивация символов продукта при помощи сервера символов ускоряет и упрощает отладку в любой системе, в том числе в системах, установленных у заказчика.
Нежелательные действия
Исправлять чужие ошибки без ведома владельцев кода.
Изучение и попытка исправления чужих ошибок является прекрасной практикой. Так можно лучше узнать код и оказать помощь другим людям. Единственное, чего не стоит делать, это возвращать исправление, не сообщив о данном исправлении владельцу кода.
Присваивать ошибке статус "Невоспроизводимая", не проверив эту же версию в этой же среде.
Необходимо выполнить откат до той версии продукта, в которой была найдена ошибка. Не считайте, что если в текущей версии продукта сбоя не происходит, то это значит, что ошибка исправлена. Это может быть и не так. Код мог претерпеть изменения, и теперь ошибка в нем может быть попросту не видна. Если изучать ошибку до тех пор, пока не произойдет сбоя, можно докопаться до основной причины проблемы и устранить ее, чтобы ошибка больше не повторилась ни на одном из компьютеров.
См. также
Основные понятия
Рекомендации по написанию безопасного кода
Другие ресурсы
Программа создания малого дампа для общеязыковой среды выполнения