Есть ответ 👍

Какие есть приемы поиска ошибок при отладке программ?​

168
206
Посмотреть ответы 2

Ответы на вопрос:


1. Отладка программы

2. Локализация ошибок

Локализация - это нахождение места ошибки в программе.

В процессе поиска ошибки мы обычно выполняем одни и те же действия:

прогоняем программу и получаем результаты;

сверяем результаты с эталонными и анализируем несоответствие;

выявляем наличие ошибки, выдвигаем гипотезу о ее характере и месте в программе;

проверяем текст программы, исправляем ошибку, если мы нашли ее правильно.

обнаружения ошибки:

Аналитический - имея достаточное представление о структуре программы, просматриваем ее текст вручную, без прогона.

Экспериментальный - прогоняем программу, используя отладочную печать и средства трассировки, и анализируем результаты ее работы.

Оба по-своему удобны и обычно используются совместно.

3. Принципы отладки

Принципы локализации ошибок:

Большинство ошибок обнаруживается вообще без запуска программы - просто внимательным просматриванием текста.

Если отладка зашла в тупик и обнаружить ошибку не удается, лучше отложить программу. Когда глаз "замылен", эффективность работы упорно стремится к нулю.

Чрезвычайно удобные вс средства - это отладочные механизмы среды разработки: трассировка, промежуточный контроль значений. Можно использовать даже дамп памяти, но такие радикальные действия нужны крайне редко.

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

4. Методы отладки

Силовые методы

- Использование дампа (распечатки) памяти.

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

- Использование отладочной печати в тексте программы - произвольно и в большом количестве.

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

- Использование автоматических средств отладки - трассировки с отслеживанием промежуточных значений переменых.

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

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

С точки зрения "правильного" программирования силовые методы плохи тем, что не поощряют анализ задачи.

Суммируя свойства силовых методов, получаем практические советы:

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

- использовать отладочную печать в небольших количества и "по делу";

- оставить дамп памяти на самый крайний случай.

Метод дедукции - от общего к частному.

Выдвигаем гипотезу, которая может объяснить ошибку, пусть и не полностью. Затем при тестов эта гипотеза проверяется и доказывается.

Обратное движение по алгоритму.

Отладка начинается там, где впервые встретился неправильный результат. Затем работа программы прослеживается (мысленно или при тестов) в обратном порядке, пока не будет обнаружено место возможной ошибки.

Метод тестирования.

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

var

a, b, c: real;

begin

writeln('Программа находит значение максимального из трех введенных чисел');

write('Введите первое число '); readln(a);

write('Введите второе число '); readln(b);

write('Введите третье число '); readln(c);

if (a>b)and(a>c) then

writeln('Наибольшим оказалось первое число ',a:8:2)

else if (b>a)and(<strong>a</strong>>c) then

writeln('Наибольшим оказалось второе число ',b:8:2)

else

writeln('Наибольшим оказалось третье число ',<strong>b</strong>:8:2);

end.

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

1) Аварийная печать - вывод сообщений о ненормальном завершении

saqo2017
4,5(83 оценок)

N = 2^{i}

N = 256

i = 8

ответ: Каждый символ кодируется 8 битами

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

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

Подпишись на наш телеграмм канал

GTP TOP NEWS