Jump to content

Отладочный код

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

[ редактировать ]
[ редактировать ]

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

пример С++

[ редактировать ]
void TestFunction(int timesToRun) {
  cout << "the algorithm should run " << timesToRun << " times" << std::endl;
  for (int i = 0; i <= timesToRun; i++) {
    // run algorithm
    algorithm();
    // debug print statement
    cout << "algorithm run " << i++ << " times." << std::endl;
  }
}

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

the algorithm should run 5 times
algorithm run 1 times.
algorithm run 2 times.
algorithm run 3 times.
algorithm run 4 times.
algorithm run 5 times.

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

the algorithm should run 5 times
algorithm run 1 times.
algorithm run 2 times.
algorithm run 3 times.
algorithm run 4 times.
algorithm run 5 times.
algorithm run 6 times.

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

Утверждающие утверждения

[ редактировать ]

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

Пример С

[ редактировать ]
int i, a[10];
for (i = 0; i < 10; ++i)
{
  a[i] = 10-i;
}
for (i = 0; i < 10; ++i)
{
  a[a[i]] = a[i];
}

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

#include <assert.h>
int i, a[10];
for (i = 0; i < 10; ++i)
{
  assert(0 <= i && i < 10);
  a[i] = 10-i;
}
for (i = 0; i < 10; ++i)
{
  assert(0 <= i && i < 10);
  assert(0 <= a[i] && a[i] < 10);
  a[a[i]] = a[i];
}

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

  1. ^ «Архивная копия» . Архивировано из оригинала 02 апреля 2010 г. Проверено 26 марта 2010 г. {{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  2. ^ Геймер, ПК (10 ноября 2021 г.). «Консольные команды Skyrim: станьте гигантом, призраком или живым богом» . ПК-геймер .
  3. ^ «Техники отладки» . oopweb.com . Архивировано из оригинала 17 августа 2002 г.
  4. ^ «В-Визитка» .
  5. ^ "Дом" . junit.org .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8af67761fc4d7ff4dbfae4eb1fd6727b__1719853020
URL1:https://arc.ask3.ru/arc/aa/8a/7b/8af67761fc4d7ff4dbfae4eb1fd6727b.html
Заголовок, (Title) документа по адресу, URL1:
Debug code - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)