Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

___МЕТОДИЧКИ_2013 / Пособие по ОСМПС (pdf) / 15_Отладка программ для ПК на уровне машинных команд

.pdf
Скачиваний:
38
Добавлен:
15.03.2016
Размер:
243.96 Кб
Скачать

15. ОТЛАДКА ПРОГРАММ ДЛЯ ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА НА УРОВНЕ МАШИННЫХ КОМАНД

15.1. ПРОГРАММНЫЕ ОТЛАДЧИКИ И ИХ ИСПОЛЬЗОВАНИЕ

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

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

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

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

Примером последовательного отладчика является DOS утилита DEBUG.COM, до сих пор включаемая во все версии операционной системы WINDOWS. Набрав в окне поиска DEBUG*, ее можно найти на диске C любого ПК. Кратко возможности программы DEBUG описаны в приложении 2.

Для реализации отладчиков в реальном режиме созданы специальные прерывания режима трассировки и контрольной точки. В режиме трассировки выполняемая программа переходит в режим прерывания по вектору 1 при выполнении каждой очередной команды. Разработчик отладчика режима трассировки после выполнения очередной команды вносит изменения во все отображения памяти и регистры, содержимое которых изменилось при выполнении очередной команды (либо выполняет отображение всех регистров и переменных, подключенных для отображения областей памяти).

Команда перехода в режим обработки контрольной точки или точки приостанова INT 3 имеет в процессорах ix86 однобайтную модификацию. Простейший способ создания контрольной точки в памяти - это обмен кода операции машинной команды в памяти на команду INT 3 перед выполнением участка программы. Такой подход возможен практически всегда, за исключением случаев записи программы в ПЗУ (ROM).

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

Наиболее популярными являются многорежимные отладчики, поставляемые в составе разнообразных систем программирования: TurboDebugger фирмы Borland, отладчики фирмы Microsoft, Watcom и ряд других.

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

Следующее поколение отладчиков, прежде всего, получило усовершенствованные средства отображения текущего состояния отлаживаемых задач - многооконные средства. Пример представления окон отладчика TurboDebugger для реального 16битового режима на уровне машинных команд программы, составленной на языке C++, приведен на рис 15.1. Верхняя строка экрана - горизонтальное меню, содержащее средства перестройки режимов отображения, управления комплексом отлаживаемых модулей и функциональных режимов. На нижней строке указывается назначение функциональных клавиш отладчика.

Рис. 15.1. Начало отладки в многооконном отладчике TurboDebugger

На рис. 15.1 показаны 4 основных окна отладчика TurboDebugger:

• окно выполняемых команд, выделенных из текста отлаживаемой программы с

предыдущей и последующей командами (выделено строкой, подсвеченной в активном окне, и стрелкой после адреса);

окно регистров и признаков результатов (регистра флагов);

окно данных, установленное по умолчанию на сегмент DS;

окно стека, в котором можно наблюдать верхушку стека, а сделав его активным,

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

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

трольных точек (breakpoints).

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

Режим переформатирования окон отображения текущего процесса. В отладчи-

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

Режим пошаговой отладки. Включается нажатием определенной функциональной клавиши. Для отладчика TurboDebugger это клавиша [F7] - Trace, обеспечивающая просмотр выполнения очередного оператора с вхождением в подпрограммы и циклы, либо клавиша [F8] - Step с интегральным выполнением циклов и вхождений в подпрограммы.

Режим продвижения до окончания программы или достижения контрольной точки. В TurboDebugger запускается функциональной клавишей [F9] - Run.

В режиме подготовки меню верхней строки используется для выбора выполняемых программных модулей, настройки форматов окон и выбора дополнительных окон. Форматы представлений окон определяются в меню View. Там можно задать режимы отображения окон регистров, математического сопроцессора и требуемых сегментов памяти. Доступ к пунктам меню производится в соответствии со стандартами Windows

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

На рис. 15.2 показан момент пошагового выполнения 16-битового кода, содержащего команды FPU. Окно сопроцессора вызвано из меню View и реконфигурировано к форме, удобной для просмотра данных с плавающей точкой. В правых подокнах показаны биты регистров состояния и управления сопроцессора, а окне регистров - десятичные значения.

Рис. 15.2. Шаг отладки с отображением 32-битовых регистров

иокна математического сопроцессора в TurboDebugger

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

• данных, представленных десятичным или шестнадцатеричным форматом с фиксированной и плавающей точкой;

• кодов, включая реконструированные тексты и ассемблерные коды.

Основные окна, режима, отладки программ, составленных на языках программирования высокого уровня:

• окно реконструированной программы с текущей и контрольными точками;

• окно отображаемых текущих значений данных;

• окно или экран пользователя.

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

Наиболее важным при отладке является отбор информации о потенциально ошибочных местах программы. Для этого нужно расставить в программе контрольные точки и определить условия сбора информации. Средства получения и накопления отладочной информации в контрольных точках TurboDebugger выполняют такие действия: break - приостанов, log - регистрация в журнале, execute - вычисление выражения. Проверяемые условия:

changed memory - изменение областей памяти;

pass count = xx - количество повторных проходов через контрольную точку; hardware - изменение состояния оборудования;

expression true - истинность специальных булевых выражений; always - безусловная приостановка выполнения программы.

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

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

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

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

Рациональная организация работы с отладчиками основывается на чередовании основных режимов выполнения программы:

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

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

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

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

Перечислим общие принципы локализации ошибки.

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

участках необходимо придерживаться принципа деления "подозреваемых" участков пополам. Этот принцип пригоден для всех языков программирования.

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

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

15.2.СОСТАВЛЕНИЕ КОНТРОЛЬНЫХ ПРИМЕРОВ ДЛЯ ПРОВЕРКИ ПРАВИЛЬНОСТИ ПРОГРАММ

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

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

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

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

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

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

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

15.3. ТИПИЧНЫЕ ОШИБКИ И КОРРЕКЦИЯ ПРОГРАММ

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

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

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

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

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

аварийное завершение задачи с сообщением ОС, обработавшей завершение;

зацикливание машины, снимаемое стандартным способом принудительного прекращения задач в рамках эксплуатируемой ОС;

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

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

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

неправильное понимание формальной модели предметной области и задачи;

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

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

ошибки и промахи в использовании команд и распределении регистров процессоров и памяти;

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

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

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

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

1. Зависание однопрограммной системы, что чаще всего является следствием зацикливания программы. Возможные причины:

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

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

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

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

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

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

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

3. Аварийное завершение, как и зацикливание, не приводит к выдаче достаточной информации для локализации и, тем более, определения причин ошибки. Аварийные завершения обычно возникают из-за ошибок в защите памяти, связанных с неправильным определением указателей на данные или их выходом за пределы выделенных областей памяти. При разработке программ уровня операционных систем причиной таких ошибок может быть неправильное использование команд и структур данных защищенного режима. В этом случае некоторые расширители DOS дают информативный вывод содержимого регистров, что позволяет облегчить выявление причины ошибки. Методика локализации ошибки та же, что и в предыдущих случаях.

4.Локализация причин, приведших к получению неправильных результатов, выполняется при поэтапном анализе промежуточных результатов и поиске первого отклонения результата от ожидаемых эталонов. Иногда причинами таких отклонений могут быть частичные разрушения программ и данных. Признаки - нерегулярность появления ошибок и псевдослучайные отклонения результатов.

5.Существенные отклонения результатов, проявляющиеся в отдельных и редких ситуациях, требуют создания специальных контрольных примеров, ориентированных на просмотр таких ситуаций.

В этих случаях от пассивных экспериментов по тестированию с заранее заданными исходными данными контрольных примеров следует перейти к тактике активных локальных экспериментов для проверки сомнительных фрагментов программы. Локализация ошибки не всегда сразу определяет причину ошибки. Многочисленные локальные эксперименты позволяют выделить и определить ее причины более точно.

6.Малые отклонения в результатах численных программ чаще всего обусловлены неправильной последовательностью выполнения действий с плавающей точкой, которая ведет к существенной потере точности результатов. Локализация ошибок затруднена, так как они накапливаются при выполнении множества операций. Другие причины таких отклонений - неправильный выбор режима выполнения математических операций с плавающей точкой, ошибки в реализации системных и библиотечных программ (компиляторов и стандартных функций).

7.Редкие малые отклонения в результатах программ труднее всего распознать и локализовать. Их причины и соответствующие способы локализации те же, что и в п. 6.

Важнейший момент - быстрая и надежная нейтрализация или устранение ошибок. Несмотря на то, что отладка программ и исправление ошибок и замечаний по результатам опытной эксплуатации обычно ограничены по времени, эти действия необходимо выполнять не менее тщательно, чем первичное программирование. Рассмотрим меры по нейтрализации ошибок (в порядке увеличения радикальности необходимых действий).

1.Легче всего устраняются ошибки и промахи, возникшие при подготовке программ. Для этого вносятся соответствующие изменения в исходные тексты программ.

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

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

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

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

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

15.4. ОСНОВЫ АППАРАТНО-ПРОГРАММНОЙ ОТЛАДКИ

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

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

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

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

Заключение

Проверка корректности программ для ПК осуществляется тестированием. Программы проверяются на функционирование с различными исходными данными. Результаты функционирования программ сравниваются с эталонными значениями.

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