* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Использование отладочных инструментов
8 февраля 2009
Полностью избежать ошибок при программировании невозможно, даже професси- оналы время от времени допускают ошибки. Ошибки в программах часто называют «жучками» (bugs), а процесс поиска и исправления этих ошибок — отладкой (debugging, буквально — «ловля жучков»). На этом занятии вы познакомитесь с различ- ными типами возможных ошибок и с инструментами для их поиска и исправления. Изучив материал этого занятия, вы сможете:
^ описать наиболее распространенные типы ошибок; ^ применять режим Break и устанавливать точки прерывания; •S осуществлять пошаговое исполнение кода; ^ рассказать, как работают с отладочными инструментами среды разработки. Продолжительность занятия - около 45 минут. Основные типы ошибок При написании кода программисты сталкиваются с тремя основными типами оши- бок. Синтаксические ошибки (syntax errors) возникают, если компилятор не в состо- янии «понять* переданный ему исходный текст. При попытке выполнить недопус- тимое действие во время исполнения программы возникают ошибки периода выпол- нения (run-time errors). Наконец, логические ошибки (logical errors) не препятствуют компиляции и исполнению программы, но приводят к неожиданным результатам. Синтаксические ошибки Синтаксические ошибки возникают, если компилятор не может скомпилировать предоставленный ему код, например, из-за опечатки в ключевом слове, пропуска знака препинания или использования неверной конструкции. Следующий пример кода содержит две синтаксические ошибки: Visual Basic .NET Public Sub SyntaxErrorO System.Windows.Forms.MessageBoxShow("Where's the error?") Visual C# public void SyntaxErrorO { System.Windows.Forms.MessageBoxShow("Where's the error?"); Во-первых, здесь пропущена точка между MessageBox и Show, поэтому компи- лятор не распознает такую ссылку. Во-вторых, отсутствует замыкающий элемент конструкции метода (в Visual Basic .NET это End Sub, а в Visual C# — }). Любая из этих ошибок не позволит компилятору интерпретировать такой код. Visual Studio .NET облегчает поиск синтаксических ошибок, автоматически об- наруживая их при компоновке проекта и выделяя в исходном тексте подсветкой. Если дважды щелкнуть описание ошибки в окне Task List, среда разработки не- медленно переместит курсор в соответствующую строку в окне кода и выделит ошибку подсветкой — обычно этого достаточно, чтобы ее распознать и исправить. Чтобы получить дополнительное описание выделенной ошибки, нажмите F1. Visual Basic .NET автоматически проверяет синтаксис кода по мере его ввода, при этом обнаруженные синтаксические ошибки сразу же выделяются подсветкой и добавляются к списку в окне Task List, таким образом, не обязательно иницииро- вать компоновку проекта, чтобы обнаружить синтаксические ошибки. Visual C# также поддерживает автоматическую проверку синтаксиса кода при вводе, но она не столь совершенна, как в Visual Basic. *• Как найти и исправить допущенные синтаксические ошибки 1. Выполните компоновку проекта — при этом любые синтаксические ошибки бу- дут обнаружены и добавлены в окно Task List (при использовании Visual Basic .NET это делается автоматически без компоновки проекта). 2. Дважды щелкните ошибку в окне Task List — она будет выделена в окне редак- тора кода подсветкой. 3. Исправьте найденную ошибку. Если требуется дополнительная информация, на- жмите F1. Ошибки периода выполнения Они возникают при попытке приложения выполнить недопустимую операцию. К этой категории относятся деление на ноль и действия, запрещенные политиками безопасности: попытка их исполнения приводит к генерации исключения зашиты. При возникновении ошибки периода выполнения генерируется исключение (exception), предоставляющее описание ошибки, — специальный класс, который служит для передачи сведений об ошибке другим компонентам приложения. Можно напи- сать код, который будет обрабатывать исключения, не допуская остановки исполне- ния приложения. Подробнее обработка исключений рассматривается на занятии 4. Логические ошибки Логическую ошибку констатируют, если приложение корректно компилируется и исполняется, но не выдает ожидаемые результаты. Диагностировать такие ошибки труднее, чем остальные, из-за отсутствия указаний на источник ошибки. Причиной логической ошибки могут быть такие, на первый взгляд, незначительные промахи, как неверно поставленная точка в десятичной дроби или лишний ноль: Visual Basic .NET Public Function CalculateSalary(ByVal HourlyRate As Single) As Single Dim YearlySalary As Single YearlySalary - HourlyRate * 52 * 400 Return YearlySalary End Function Visual C# public float CalculateSalary(float HourlyRate) ; float YearlySalary; YearlySalary = HourlyRate * 52 * 400; return YearlySalary; } Этот метод получает значение ставки почасовой оплаты и вычисляет размер го- довой зарплаты, умножая полученное значение на число недель в году и на количе- ство рабочих часов в неделю. Ошибка возникает, поскольку значение почасовой оплаты умножается на 400, тогда как в рабочей неделе 40 часов, Компиляция и ис- полнение этого метода проходит безошибочно, но результат он возвращает невер- ный. Чтобы обнаружить логическую ошибку, необходимо предоставить приложе- нию тестовые данные и проанализировать полученные результаты. Подробнее об этом рассказывается на занятии 3. Часто для «отлова» логической ошибки прихо- дится анализировать код, строку за строкой. Для этого применяется режим поша- гового исполнения кода.