- •История развития языков программирования.
- •Характерные черты языков программирования.
- •Среды программирования и трансляторы.
- •Препроцессор, директивы препроцессора.
- •17. Указатели и массивы.
- •15. Операции над указателями.
- •16. Последовательность выполнения операций над указателями. Пример. Последовательность выполнения операций над указателями
- •18. Отладка программ, локализация ошибок, типы ошибок.
- •19. Ошибки выполнения, способы их проявления.
- •22. Методы отладки по.
- •20. Языки с защищенным и с незащищенным синтаксисом. Примеры.
- •21. Разновидности ошибок выполнения программ.
- •23. Метод индукции при отладке по.
- •24. Метод дедукции при отладке по.
- •25. Метод ручного тестирования при отладке по.
- •26. Возможности интегрированных средств отладки.
- •27. Важные особенности процесса отладки по.
- •28. Представление чисел в формате с фиксированной и с плавающей запятой.
26. Возможности интегрированных средств отладки.
Методы и средства получения дополнительной информации
Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства:
отладочный вывод;
интегрированные средства отладки;
независимые отладчики.
Интегрированные средства отладки. Большинство современных сред программирования (Delphi, Builder С++, Visual Studio и т. д.) включают средства отладки, которые обеспечивают максимально эффективную отладку. Они позволяют:
выполнять программу по шагам, причем как с заходом в подпрограммы, так и выполняя их целиком;
предусматривать точки останова;
выполнять программу до оператора, указанного курсором;
отображать содержимое любых переменных при пошаговом выполнении;
отслеживать поток сообщений и т. п.
На рис. 11.5 покачан вид программы в момент перехода в режим пошагового выполнения по достижении точки останова в Delphi. В этот момент программист имеет возможность посмотреть значения интересующих его переменных.
Применять интегрированные средства в рамках среды достаточно просто. Используют разные приемы в зависимости от проявлений ошибки. Мели получено сообщение об ошибке, то сначала уточняют, при выполнении какого оператора программы оно получено. Для этого устанавливаю! точку останова в начало фрагмента, в котором проявляется ошибка, и выполняют операторы в пошаговом режиме до проявления ошибки.
Аналогично поступают при «зависании» компьютера.
Если получены неправильные результаты, то локализовать, ошибку обычно существенно сложнее. В этом случае сначала определяю! фрагмент, при выполнении которого получаются неправильные результаты. Для этого последовательно проверяют интересующие значения в узловых точках. Обнаружив значения, отличающиеся от ожидаемых, по шагам транслируют соответствующий фрагмент до выявления оператора, выполнение которого дает неверный результат.
27. Важные особенности процесса отладки по.
Следует иметь в виду, что процесс отладки можно существенно упростить, если следовать основным рекомендациям структурного подхода к программированию:
программу наращивать «сверху-вниз», от интерфейса к обрабатывающим подпрограммам, тестируя ее по ходу добавления подпрограмм;
выводить пользователю вводимые им данные для контроля и проверять их на допустимость сразу после ввода;
предусматривать вывод основных данных во всех узловых точках алгоритма (ветвлениях, вызовах подпрограмм).
Кроме того, следует более тщательно проверять фрагменты программного обеспечения, где уже были обнаружены ошибки, так как вероятность ошибок в этих местах по статистике выше. Это вызвано следующими причинами. Во-первых, ошибки чаще допускают в сложных местах или в тех случаях, если спецификации на реализуемые операции недостаточно проработаны. Во-вторых, ошибки могут быть результатом того, что программист устал, отвлекся или плохо себя чувствует. В-третьих, как уже упоминалось выше, ошибки часто появляются в результате исправления уже найденных ошибок.
Возвращаясь к рис. 11.2, можно отметить, что проще всего обычно искать ошибки определения данных и ошибки накопления погрешностей: их причины локализованы в месте проявления. Логические ошибки искать существенно сложнее. Причем обнаружение ошибок проектирования требует возврата на предыдущие этапы и внесения соответствующих изменений в проект. Ошибки кодирования бывают как простые, например использование неинициализированной переменной, так и очень сложные, например ошибки, связанные с затиранием памяти.
Затиранием памяти называют ошибки, приводящие к тому, что в результате записи некоторой информации не на свое место в оперативной памяти, затираются фрагменты данных или даже команд программы. Ошибки подобного рода обычно вызывают появление сообщения об ошибке. Поэтому определить фрагмент, при выполнении которого ошибка проявляется, несложно. А вот определение фрагмента программы, который затирает память - сложная задача, причем чем длиннее программа, тем сложнее искать ошибки такого рода. Именно в этом случае часто прибегают к удалению из программы частей, хотя это и не обеспечивает однозначного ответа на вопрос, в какой из частей программы находится ошибка. Эффективнее попытаться определить операторы, которые записывают данные в пямять не по имени, а по адресу, и последовательно их проверить. Особое внимание при этом следует обращать на корректное распределение памяти под данные.
