Стек вызовов, принцип разделения данных и кода при отладке, воспроизводимые и невоспроизводимые ошибки. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Стек вызовов, принцип разделения данных и кода при отладке, воспроизводимые и невоспроизводимые ошибки.



Стек вызовов — в теории вычислительных систем, LIFO-стек, хранящий информацию для возврата управления из подпрограмм (процедур) в программу (или подпрограмму, при вложенных или рекурсивных вызовах) и/или для возврата в программу из обработчика прерывания (в том числе при переключении задач в многозадачной среде).

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

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

Реализация:

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

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

Принцип разделения данных и кода при отладке:

1)Уменьшайте количество входных данных, найдите минимальный набор, при котором ошибка всё еще появляется.

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

3)Попробуйте двоичный поиск для данных - отбросьте половину и проверьте наличие ошибки.

4)Что насчет двоичного поиска проблемного места в коде? И это помогает!

Невоспроизводимые ошибки: С нестабильными ошибками сложнее всего иметь дело, и обычно проблема не столь очевидна, как неисправное "железо. Это означает, что ошибка, скорее всего, не в вашем алгоритме, а в том, как ваш код использует информацию, которая изменяется при каждом выполнении программы. Проверьте, что все переменные инициализированы. Может быть, вы просто используете случайное значение, оставшееся в повторно используемой ячейке памяти. При написании программ на С и C++ в этом чаще всего виновны локальные переменные функций и выделяемая память. Установите все переменные в заранее известное значение; напрмер, если стартовое значение генератора случайных чисел обычно вычисляется исходя из времени суток, то присвойте ему нулевое значение. Если ошибка изменяет свое поведение или вообще исчезает при добавлении отладочного кода, то это может быть связано с выделением памяти: где-то вы пишете за пределы выделенной памяти, а добавление отладочного кода изменяет расположение данных в памяти, так что ошибка начинает проявляться по-другому. Воспроизвести ошибку можно самостоятельно в приложениях,который используют математический сопроцессор при работе с числами с плавающей запятой: 4195835*3145727/3145727=4195835 (При умножении и делении на одно и то же число получаем исходное число.

4195835*3145727/3145727=4195835 (Ошибочное значение,возвращаемое процессором,содержащим дефект)

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

Слабо воспроизводимые ошибки (скорей всего невоспроизводимые): Ошибки, которые обусловлены программно-аппаратным окружением компьютера, на который установлена Программа; это может быть как клиентский, так и серверный компьютер; сложность исправления таких Ошибок заключается в том, что Ошибка зависит от программно-аппаратного окружения одного конкретного компьютера, и проявляется только на нем.

 

Билет № 12. Привести пример проверочного кода при отладке. Дополнительные инструменты отладки: примеры использования log-файлов, графические способы анализа поведения кода.

Ответ: Баг - ошибка в программном коде (ошибочная ситуация возникшая во время выполнения программы)

Ищите знакомые ситуации

«Я уже видел это»-ключ к пониманию ситуации

Проверьте самое последнее изменение (… и почаще тестируйте новые куски кода, так как каждый раз мы правим отдельный кусок кода, то появившаяся ошибка может быть:

-в исправленном/написанном коде

-в старом коде, который вызывается из нового кода



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 415; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.166.223.204 (0.06 с.)