Страницы

Поиск по вопросам

понедельник, 25 ноября 2019 г.

Как и какими средствами находить ошибки в коде на C#?


Здравствуйте!

Я занимаюсь разработкой и когда пишу код, то он иногда не работает так, как 
 я задумывал или даже вообще не работает. Сижу и смотрю на него, гадаю: что и где не так?

Не могу усидеть - иду сразу на ресурсы профессионалов, например Stack Overflow 
публикую вопрос  "Где здесь ошибка?" или "Почему не работает?"

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

Вопрос: какие есть способы, чтобы найти ошибки в коде на C#? Какие есть инструменты, методы  и т.д.? 

Спасибо.
    


Ответы

Ответ 1



Вчера всё работало, а сегодня не работает / Код не работает как задумано или Debugging (Отладка) В чем заключается процесс отладки? Что это такое? Процесс отладки состоит в том, что мы останавливаем выполнения скрипта в любом месте смотрим, что находится в переменных, в функциях, анализируем и переходим в другие места; ищем те места, где поведение отклоняется от правильного. Заметка: Отладка производится как правило в IDE (Интегрированная среда разработки). Что это такое можно чуть подробнее ознакомиться в вопросе Какие есть способы предупреждения ошибок, их нахождения и устранения? В данном случае будет рассмотрен пример с Visual Studio, но отладить код можно в любой другой IDE. Подготовка Достаточно иметь в наличии IDE, например Visual Studio Запуск Для начала в левой части панели с кодом на любой строке можно кликнуть ЛКМ, тем самы поставив точку останова (breakpoint - брейкпойнт). Это то место, где отладчик автоматически остановит выполнение C#, как только до него дойдёт. Количество breakpoint'ов не ограничено. Можно ставить везде и много. Отладка запускается сочетанием F5 или выбором в верхнем меню Debug → Start Debugging В данном случае, т.к. функция вызывается сразу на той же странице, то при нажати кнопки Debug — отладчик моментально вызовет метод, выполнение "заморозится" на перво же брейкпойнте. В ином случае, для активации требуется исполнить действие, при котором произойдет исполнение нужного участка кода (клик на кнопку в UI, передача POST запроса с данными и прочие другие действия) Цифрами обозначены: Стэк вызовов, все вложенные вызовы, которые привели к текущему месту кода. Переменные. На текущий момент строки ниже номера 8 ещё не выполнилась, поэтому определена лишь data и numsStringArr Показывает текущие значения любых переменных и выражений. В любой момент здесь можн вписать имя любой переменной в поле name и посмотреть её значение в реальном времени Например data или nums[0], а можно и nums[i] и item.test.data.name[5].info[key[1]] и т.д. На текущий момент строки ниже номера 24 ещё не выполнилась, поэтому num (которая появляется лишь в цикле foreach) во вкладке Watch обозначена красным цветом с надписью "The name 'num' does not exist in the current context". Процесс Для самого процесса используются элементы управления (см. изображение выше, выделено зеленым прямоугольником) Show Next Statement (Alt+Num *) — переносит в файл и текущую линию отлаживаемог скрипта. Например если файлов много, решили посмотреть что в других вкладках, а потом забыли где у вас отладка :) Step Over (F10) — делает один шаг не заходя внутрь функции. Т.е. если на текуще линии есть какая-то функция, а не просто переменная со значением, то при клике данной кнопки, отладчик не будет заходить внутрь неё. Step Into (F11) — делает шаг. Но в отличие от предыдущей, если есть вложенный вызов (например функция), то заходит внутрь неё. Step Out (Shift+F11) — выполняет команды до завершения текущей функции. Удобна, есл случайно вошли во вложенный вызов и нужно быстро из него выйти, не завершая при этом отладку. Restart (Ctrl+Shift+F5) — Перезапустить отладку Continue (F5) — Продолжает выполнения скрипта с текущего момента. Если больше не других точек останова, то отладка заканчивается и скрипт продолжает работу. В ином случае работа прерывается на следующей точке останова. Stop Debugging (Shift+F5) — Завершить отладку ... Итак, в текущем коде видно значение входного параметра: data = "23 24 11 18" — строка с данными через пробел numsStringArr = {"23", "24", "11", "18"} — массив строк, который получился из входной переменной. Если нажмем F10 2 раза, то окажемся на строке 11; во вкладках Watch и Variables в самой странице с кодом увидим, что nums была инициализирована и в ней лежит массив целых чисел {23, 24, 11, 18} . Если теперь нажмем F10, то попадем внутрь цикла foreach и нажимая теперь F10 пок не окончится цикл, можно будет наблюдать на каждой итерации, как значение num и su постоянно изменяются. num теперь можно будет наблюдать во вкладке Watch, потому что сейчас она доступна внутри цикла. Тем самым мы можем проследить шаг за шагом весь процесс изменения любых переменных и значений на любом этапе, который интересует. Дальнейшие нажатия F10 переместит линию кода на строки 15, 16 и, наконец, 20. Дополнительно Если перейти во вкладку Breakpoints в нижней панели, то можно посмотреть все брейкпойнты удалить все брейкпойнты, включить/выключить, а также еще более тонко настроить условие, при котором на данной отметке надо остановиться. В методе выше, например, нужно остановиться только когда sum превысит значение 20. Это удобно, если останов нужен только при определённом значении, а не всегда (особенно в случае с циклами). Больше информации об отладке можно посмотреть в https://msdn.microsoft.com/ru-ru/library/sc65sadd.aspx

Комментариев нет:

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