WikiDer > Код отладки

Debug code

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

Использование отладочного кода

Основная функция кода отладки - помочь отлаживать код. Это можно сделать несколькими способами, например с помощью операторов печати, команд assert и модульного тестирования.

Использование в кодировании

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

Использование в видеоиграх

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

Рекомендуется как лучшая практика что отладочный код должен быть удален из производственных версий приложений, так как он может замедлить их работу.[1] Однако некоторые игры оставляют эти команды и читы доступными для игроков, чтобы они могли улучшить свой игровой процесс. Например, версия для ПК. Скайрим позволяет игроку получить доступ к командной консоли, давая ему возможность изменять определенные аспекты своей игры во время ее запуска. Эти команды включают в себя предоставление игроку неуязвимости, телепортации и неограниченного золота.[2]

Примеры отладочного кода

Отладка печати

Отладка печати - это использование операторов печати для поиска и изоляции ошибок в программе. Его можно использовать для отслеживания потока значений данных фрагмента кода. Этот тип отладочного кода имеет несколько явных недостатков. Это временно и обычно удаляется после устранения ошибки. Использование многих операторов печати может повлиять на фактический вывод программы и замедлить время выполнения, в зависимости от того, как часто вызываются операторы печати. В некоторых случаях операторы печати не помогают найти проблему, например, C ++ stdout имеет буферизованный вывод, а иногда содержимое буфера теряется, что приводит к неверной отладочной информации.[3]

Пример C ++

пустота TestFunction(int timesToRun) {  cout << "алгоритм должен работать" << timesToRun << "раз" << стандартное::конец;  за (int я = 0; я <= timesToRun; я++) {    // запускаем алгоритм    алгоритм();    // отладочный оператор печати    cout << "запуск алгоритма" << я++ << "раз". << стандартное::конец;  }}

В приведенном выше коде есть ошибка. При вводе 5 программа должна вывести в консоль следующее.

алгоритм должен выполняться 5 раз алгоритм запускается 1 раз. алгоритм запускается 2 раза. алгоритм запускается 3 раза. алгоритм запускается 4 раза. алгоритм запускается 5 раз.

Фактический вывод следующий, что неверно.

алгоритм должен выполняться 5 раз алгоритм запускается 1 раз. алгоритм запускается 2 раза. алгоритм запускается 3 раза. алгоритм запускается 4 раза. алгоритм запускается 5 раз. алгоритм запускается 6 раз.

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

Утверждать заявления

Обычно лучшее время для исправления ошибки - до запуска программы. Это можно сделать, вставив в код утверждения. В C это можно сделать с помощью команды assert (). Команда assert может проверить, выполняет ли программа правильные условия на данном этапе программы.[4]

Пример C

int я, а[10];за (я = 0; я < 10; ++я){  а[я] = 10-я;}за (я = 0; я < 10; ++я){  а[а[я]] = а[я];}

Приведенный выше код вызовет ошибку за пределами допустимого диапазона, которая может привести к некоторым неожиданным результатам. Код можно написать более безопасным способом, используя утверждения, как показано ниже.

#включают <assert.h>int я, а[10];за (я = 0; я < 10; ++я){  утверждать(0 <= я && я < 10);  а[я] = 10-я;}за (я = 0; я < 10; ++я){  утверждать(0 <= я && я < 10);  утверждать(0 <= а[я] && а[я] < 10);  а[а[я]] = а[я];}

JUnit

JUnit - это простая структура, используемая для написания повторяемых тестов, доступных для Java, и позволяет программистам создавать свои собственные модульные тесты. Модульный тест - это код, который написан для выполнения определенной функции в тестируемом коде и обычно нацелен на небольшую единицу кода, такую ​​как единственный метод или класс. Используя комбинацию операторов assert и других тестовых операторов, программисты могут создавать наборы тестовых примеров, чтобы определить, правильно ли выполняется метод или функция.[5]

Рекомендации

  1. ^ «Архивная копия». Архивировано из оригинал на 2010-04-02. Получено 2010-03-26.CS1 maint: заархивированная копия как заголовок (связь)
  2. ^ http://www.pcgamer.com/2011/11/16/skyrim-console-commands-let-you-cheat-and-do-other-stuff/
  3. ^ http://oopweb.com/CPP/Documents/DebugCPP/Volume/techniques.html
  4. ^ http://www.csd.uwo.ca/~jamie/C/Debug/UGCS_CS2_debugging_notes.html
  5. ^ http://junit.org/