Отладчик тестовых программ на Python.

Описание:
Доступные действия
Введите защитный код для скачивания файла и нажмите "Скачать файл"
Защитный код
Введите защитный код

Нажмите на изображение для генерации защитного кода

Текст:

Департамент образования Вологодской области

БПОУ ВО «Великоустюгский политехнический техникум»

Курсовая работа по профессиональному модулю 0102

«Прикладное программирование»

на тему:

«Отладчик тестовых программ на Python».

Выполнил студент:

специальности «Программирование в компьютерных системах»

3 курса, 931 группы

Окулвский Кирилл Александрович

Проверил преподаватель:

Тюрнин  Николай Андреевич

Работа проверена:__________________

Допущен (не допущен) к защите______

Оценка после защиты:_______________

Подпись руководителя:______________

Великий Устюг

2015-2016 учебный год

Оглавление

1.Введение

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

3.Средства отладки

4.Команды

5.Сохренение настроек конфигурации

7.Список литературы

  ХАРАКТЕРИСТИКА РАБОЧЕГО МЕСТА

Компьютер:

Характеристики:

Тип процессора:Core i5 (I5-4690K)

Количество проц. (ядер):4 (4 Cores)

Частота процессора: 3.5 GHz       

Максимальная частота процессора: 3.9GHz

Кэш L1: 32 КБ

Кэш L2: 256 КБ per core  (On-Die, ECC, Full-Speed)

Кэш L3: 6 МБ  (On-Die, ECC, Full-Speed)

Архитектура:64-Bit    

Оперативная память

Тип памяти: DDR3 SDRAM

Частота памяти: 1600 MHz

Размер оперативной памяти: 8 GB

Дисплей и видео

Видео адаптер: HD Graphics 4600/Sapphire Radeon HD7950 3Gb Dual X

Тип видеопамяти: Интегрированный/Дискретный

Размер видеопамяти: 1 ГБ/3 ГБ

Максимальный размер видеопамяти: 1 ГБ/3 ГБ

Дисплей: 22" LCD (FHD)     

Разрешение экрана: 1920 x 1080

Возможность подключения второго дисплея:HDCP,HDMI,DisplayPort x2

Разрешение подключаемого экрана: (4096 x 2160)

Накопители

Жесткий диск:     1000GB (7200 RPM)

Тип накопителя: Serial ATA (6 Gb/s)

Оптический привод: N/A     

Материнская плата

Частота системной шины: 1600Mgz

Размер памяти материнской платы: 32Гб       

Тип ROM: N/A

EFI Архитектура: 64-Bit

Слоты памяти: 4

Внешние слоты расширения: Нет

Fireware: N/A     

Bluetooth: N/A

Сетевая карта:  10 Mbps      

Asus PCE-n10 802.11 Wireless Ethernet (150Mb)

Операционная система

Установленная операционная система:Windows 10 Pro   

Возможность установки Windows (мин.):7 (32-Bit)*

Возможность установки Windows (макс.): 7 (64-Bit)*

Общие характеристики

Тип корпуса: Midi-Tower

Размеры: 200 x 430 x 479 мм    

Вес: 4.8kg

Клавиатура: HID

Мышь A4Tech x705k-мышь, предназначение: ПК, лазерная, количество клавиш мыши: 6, интерфейс подключения: USB.

Программное обеспечение:

1)Операционная система ПК: Windows 10 Pro;

Версия: 10.0.10.10586

4) Командная строка Windows.

5) Веб-браузер: Google Chrome 50.0.2661.102m

Отладка и тестирование программ

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

1.     Синтаксическая ошибка. Неправильное употребление синтаксических конструкций, например употребление оператора цикла For без то или Next.

2.     Семантическая ошибка. Нарушение семантики той или иной конструкции, например передача функции параметров, не соответствующих ее аргументам.

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

Введение:

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

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

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

Для создания программы появляется необходимость придерживаться определенных принципов и новых технологий программирования.

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

Определение программирования. Этапы создания программы

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

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

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

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

1.     Синтаксическая ошибкаНеправильное употребление синтаксических конструкций, например употребление оператора цикла For без то или Next.

2.     Семантическая ошибкаНарушение семантики той или иной конструкции, например передача функции параметров, не соответствующих ее аргументам.

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

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

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

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

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

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

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

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

     Принципы исправления ошибок еще больше похожи на законы     Мерфи:

·  Там, где найдена одна ошибка, возможно, есть и другие.

·  Вероятность, что ошибка найдена правильно, никогда не равна ста процентам.

·  Наша задача - найти саму ошибку, а не ее симптом.

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

·   Исправляя одну ошибку, очень легко внести в программу еще парочку. "Наведенные" ошибки - настоящий бич отладки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автоматизированные    средства    отладки    программ.

Стандартные    возможности отладчика. Контроль правильности написанной программы (этапы).

Средства отладки

Помимо методик, хорошо бы иметь представление о средствах, которые помогают нам выявлять ошибки. Это:

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

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

3) Непосредственное слежение:

· арифметическое (за тем, чему равны, когда и как изменяются выбранные переменные),

· логическое (когда и как выполняется выбранная последовательность

                    операторов),

· контроль выхода индексов за допустимые пределы,

· отслеживание обращений к переменным,

· отслеживание обращений к подпрограммам,

· проверка значений индексов элементов массивов и т.д.

   Нынешние среды разработки часто предлагают нам реагировать на

                   возникающую проблему в диалоговом режиме. При этом можно:

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

· прервать выполнение программы;

· внести в программу изменения и повторно запустить ее (в компиляторных средах для этого потребуется откомпилировать код, в интерпретирующих выполнение можно продолжить прямо с измененного оператора).

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

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

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

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

Шаг 4. Проверьте текст модуля, чтобы убедиться, что существуют тесты, проверяющие чувствительность к отдельным особым значениям входных данных. Добавьте недостающие тесты.

The Python Debugger

Python имеет встроенный отладчик: модуль pdb.

Названия, pdb многое взял от gdb (GNU Project debugger) — отладчика Си (и не только) программ. Программы на Python можно отлаживать и с помощью gdb, просто это немножко сложнее и дольше, хотя тем, кто хочет углубиться в устройство языка, а так же тем, кто пишет сишные модули для питона без gdb никак не обойтись. Кроме того, gdb позволяет подключиться к уже работающей программе (через её pid) и заниматься её отладкой «прямо на месте».

IPython pdb

➜ pip install ipython ipdb

IPython (и ipdb, как его часть) предлагает «более лучшую» консоль и, как следствие, более удобную отладку программ: подсветка кода, автодополнение, историю команд, динамическую интроспекцию любых объектов, магические функции, алиасы и многое другое. Полный список улучшений можно посмотреть в документации или прямо из консоли IPython, введя "?" в качестве команды. Всё это помогает при отладке и делает её простой и увлекательной.

Запустить отладку скрипта в ipdb можно несколькими способами:

python -m ipdb script.py

➜ ipdb script.py

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

Брейкпоинты - это среда программирования строки кода, которые запрещают или приостанавливают выполнение.

Но обычно такой вариант изнурителен: пока доберёшься до нужного места всеми этими «next», «step», да и ставить точку останова («break») руками каждый раз утомительно. Гораздо удобнее в нужном месте программы вставить следующую строку:

import ipdb; ipdb.set_trace()

И тогда при исполнении этой строки выполнение программы приостановится и будет запущен отладчик, — дальше можно начинать углубляться в изучение программы. По сути, функция «set_trace» — это установка точки останова (breakpoint).

Python Debugger имеет ещё один режим работы, который в некоторых случаях оказывается удобнее функции set_trace. Он называется «post mortem»: запуск отладчика с заданным трейсбеком:

Traceback (трейсбек) – это скрипт который пишет отчет в лог файл.

try:

    some_code()

except:

    import sys

    import ipdb

    tb = sys.exc_info()[2]

    ipdb.post_mortem(tb)


или так:

import sys

import ipdb

def run_debugger(type, value, tb):

    ipdb.pm()

sys.excepthook = run_debugger

some_code()


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

Debug
Интересной заменой функции «set_trace» является модуль debug, который просто импортирует библиотеки ipdb и see (удобная альтернатива функции dir) и запускает отладку. Единственным плюсом модуля является удобство использования, достаточно в любом месте программы вставить строку:

import debug


И при выполнении этой строки будет вызван отладчик «ipdb» и импортирован модуль «see».

Debug — Программа-отладчик, которую используют для проверки и отладки выполняемых файлов. Использовалась при операционной системе MS-DOS. Под более поздние версии операционных систем работает через эмулятор MS-DOS и имеет ограниченные возможности. Также иногда называют процесс отладки программы.

Данная программа является консольным приложением и предназначена для создания или изменения кода файлов. С помощью неё можно создавать простые приложения под MS-DOS и отслеживать их работу. Данный отладчик находится на самом низком уровне компиляторов assembler. Но обладает неплохими возможностями такими как просмотр, изменение памяти и получение состояния регистров.

Команды
Запуск отладчика

Программа вызывается через командную строку:

DEBUG

DEBUG [[диск:][путь]имя_файла [параметры]]

DEBUG C:мойпутьMy.com

Ipdbplugin


Ещё одна интересная и, на этот раз, полезная библиотека: nose-ipdb. С её помощью можно автоматически запускать отладчик при ошибках (исключениях) или же просто при неверно отработанных тестах. Для запуска отладчика ipdb при ошибках, достаточно при запуске тестов добавить ключ "--ipdb":

nosetests --ipdb


А для запуска отладчика при некорректно завершившихся тестов нужно добавить ключ "--ipdb-failures":

nosetests --ipdb-failures


werkzeug - сборник различных утилит для WSGI приложений Одна из них — отладчик, который позволяет выводить удобный трейсбек ошибки, а так же запускать консоль Python в соответствующем месте трейсбека прямо на странице браузера:

Использовать его очень просто, достаточно обернуть приложение с помощью соответствующего middleware:

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

from werkzeug.debug import DebuggedApplication

from myapp import app

app = DebuggedApplication(app, evalex=True)

django - pdb

Ещё один хороший модуль, на этот раз для Django: django-pdb. Он позволяет запускать отладчик при наличии соответствующего GET-параметра в запросе

python manage.py runserver –ipdb

Либо вызывать отладчик при возникновении исключений (режим «post-mortem»):

python manage.py runserver --pm
или

POST_MORTEM = True
в settings.py.

django - extensions

Но гораздо лучше в Django использовать модуль django-extensions, который добавляет очень полезную команду runserver_plus.

Для использования всего этого достаточно запустить девелоперский сервер с помощью команды runserver_plus:

python manage.py runserver_plus

PuDB

Ещё один интересный отладчик: PuDB представляет собой консольный дебагер с графическим интерфейсом:

Winpdb

Standalone отладчик Python, на этот раз с полноценным графическим интерфейсом: Winpdb:

Его разработчики утверждают, что winpdb в 20 раз быстрее pdb, а так же поддерживает работу с тредами.

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

IDE

Отдельного слова заслуживают универсальные «комбайны» программирования: IDE, которые позволяют не выходя из редактора запустить код, от профилировать его или запустить встроенный отладчик.Несколько продуктов, предназначенных для разработки на Python: PyCharm,PyDev,Wing IDE и PTVS.

Python. Отладка при помощи pdb

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

Брейкпоинты - это среда программирования строки кода, которые запрещают или приостанавливают выполнение.

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

Запускаем отладчик так:

python -m pdb script.py

python -m pdb manage.py runserver 8000

Либо в коде можно указать место откуда надо запускать отладчик:

import pdb; pdb.set_trace()

А post - mortem запускается так:

import pdb; pdb.pm()

post - mortem, это режим в котором отладчик стартует сразу после необработанного исключения.

Список команд отладчика

·         h(elp) - отладчик выведет список допустимых команд. Выполните help  для того чтобы получить справку по конкретной команде;

·         q(uit), exit - выход из отладчика.

Общие команды

·         l(ist) [ [,]] - печать исходного кода. Без передачи аргументов выводится +5 сверху и +5 снизу строк кода. Можно передать два аргумента "first" и "last" - номера строк диапазон которых надо выводить, если передать только один аргумент, то произойдет вывод +5 сверху и +5 снизу строк относительно указанного номера строки;

·         p , pp  - "print" и "pprint" соответственно;

·         a(rgs) - выводит аргументы функции;

·         whatis <arg> - выведет тип объекта;

·         alias [ [ [, ...]]] - установить алиас на какую либо команду, например:

(Pdb) alias lv locals().keys()

(Pdb) alias gv pp globals().keys()

Алаисы, помимо команд отладчика и инструкций интерпретатора могут вызывать другие алиасы. Выполнение без аргументов отображает список установленных алиасов, а если передать имя алиаса в качестве аргумента, то выведится его содержимое.
Для работы с аргументами алиаса нужно использовать следующий формат %<номер_аргумента>, а для обращения ко всем аргументам используйте %*, пример:


(Pdb) alias dirs !dir(%1)

 dirs __name__

·         unalias  - удалить определенный алиас;

·         run [...] - перезагружает скрипт с задаными параметрами, пример:

(Pdb) run runserver 8001

Restarting ./manage.py with arguments:

   runserver 8001

> /home/adw0rd/work/project/manage.py(2)()

-> import os

(Pdb) c

Validating models...

0 errors found

Тем самым вы не выходите из сессии, и если у вас есть к примеру брейкпоинты, то вы их не потеряте. Также есть встроенный алиас restart, который запускает run без аргументов;

! - префикс для работы напрямую с интерпретатором, например вызов функций или обращение к переменным, всё что следует после префикса будет отправлено интерпретатору на выполнение, пример:

# Когда имя уникально можно делать и так:

test_var = 42

# Но когда оно совпадает с именем команды, надо так:

!step = 42

(Pdb) step = 42

> /home/adw0rd/work/project/manage.py(3)()

-> import sys

(Pdb) step

> /home/adw0rd/work/project/manage.py(5)()

-> if __name__ == "__main__":

(Pdb) !step = 42

(Pdb) !step

42

Навигация по коду

·         w(here) - выводит информаию о позиции в которой сейчас находитесь;

·         s(tep) - "step into", перейти во внутрь вызова объекта, если это возможно, иначе перейти к следующей строке кода;

·         n(ext) - "step over" (перешагнуть), перейти к следующей строке кода;

·         unt(il) - перейти к следующей строке кода, но гарантировано чтобы номер строки был больше чем текущий. Пример: если вы находитесь в конце тела цикла, но это не последняя итерация, то вас не отправит в начало тела цикла, а выполнится весь цикл и отладчик встанет на следующей строке после цикла, в отличии от next;

·         r(eturn) - завершить ("выйти из") текущую функцию;

·         u(p) - подняться на один стек-фрейм вверх;

·         d(own) - опуститься на один стек-фрейм вниз;

·         j(ump)  - перепрыгнуть на указанную строку кода не выполняя код находящийся между текущей позицией и указанной. Исключение составляют циклы for и код в блоке finally (т.к. должен быть обязательно выполнен). Также, вы можете перепрыгивать только внутри текущего фрейма (т.е. нижнего фрейма).

Точки останова

При использовании листинга (команда "list") строки с брейкпоинтами помечаются префиксом "B":

(Pdb) b

Num Type   Disp Enb Where

1 breakpoint keep yes at /home/adw0rd/work/project/manage.py:5

(Pdb) list

1 #!/usr/bin/env python

2 -> import os

3 import sys

4

5 B if __name__ == "__main__":

6 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")

7 from django.core.management import execute_from_command_line

8 execute_from_command_line(sys.argv)

[EOF]

b(reak) ([:] | ) [] - установка и листинг брейкпоинтов. Аргументы позволяют указать файл и номер строки или функцию, где исполнение кода должно остановиться, пример:

(Pdb) b 5

Breakpoint 1 at /home/adw0rd/work/project/manage.py:5

(Pdb) b project/settings.py:10

Breakpoint 2 at /home/adw0rd/work/project/project/settings.py:10

(Pdb) b my_function

Breakpoint 3 at /home/adw0rd/work/project/manage.py:15

Для просмотра текущих установленных брейпоинтов, используйте команду break без аргументов:

(Pdb) b

Num Type    Disp Enb Where

1 breakpoint keep yes at /home/adw0rd/work/project/manage.py:5

2 breakpoint keep yes at /home/adw0rd/work/project/project/settings.py:10

3 breakpoint keep yes at /home/adw0rd/work/project/manage.py:15

Отдельно стоит рассмотреть брейкпоинты с условием, брейкпоинт сработает если только условие будет верно, пример:

# Брейкпоинт выполнится только если переменная "some_var" будет больше 42

(Pdb) b my_function, some_var > 42

Breakpoint 4 at /home/adw0rd/work/project/manage.py:15

condition  - добавляет к существующему брейкпоинту условие, пример:

(Pdb) condition 3 True != False

·         tbreak - временный брекпоинт, после использования удаляется, имеет одинаковый синтаксис с break;

·         ignore  - игнорировать count-раз определенный брейкпоинт. Если передать countравный нулю, то игнорирование сбросится;

·         c(ont(inue)) - продолжить (до первого брейкпоинта или до завершения работы программы);

·         disable [ ...] и enable [ ...] - первый деактивирует брейкпоинт, но НЕ удаляет его из списка брейкпоинтов. А второй снова активирует брейкпоинт, пример:

(Pdb) break

Num Type     Disp   Enb   Where

1 breakpoint keep   yes   at .../script.py:2

2 breakpoint keep   yes   at .../script.py:12

(Pdb) disable 1

(Pdb) break

Num Type     Disp Enb   Where

1 breakpoint keep no    at .../script.py:2

2 breakpoint keep yes   at .../script.py:12

(Pdb) enable 1

(Pdb) break

Num Type     Disp Enb   Where

1 breakpoint keep yes   at .../script.py:2

2 breakpoint keep yes   at .../script.py:12     

·         cl(ear) (: | [...]) - удаляет брейкпоинт(ы). Если передать номер брейкопинта то удалится только он, если ничего не пердавать - удалятся все брейкпоинты. Если передать путь и номер строки, то удалятся все брейкпоинты установленные в указанном месте;

·         commands [] - написание дополнительных действий для брейкпоинта, например вывод локальных переменных и т.п. Пример:

(Pdb) break

Num Type    Disp Enb   Where

1 breakpoint keep yes at .../script.py:2

(Pdb) commands 1

(com) p "DEBUG"

(com) pp locals()

(com) end

(Pdb) continue

# Тут идёт печать locals()

Для удаления необходимо снова запустить commands, но с пустым телом:

(Pdb) commands 1

(com) end

Сохранение настроек конфигурации

Для настроек pdb необходимо создать файл .pdbrc в корне домашней директории, либо в корне проекта. При этом совпадающие инструкции находящиеся в корне проекта переопределят тех кто находятся в корне домашней директории.

Пример файла ~/.pdbrc:

# Алиас, который позволяет указывать несколько объектов для dir()

# конечно он нужен только для примера...

alias dirs pp [dir(arg) for arg in "%*".split()]

Пример файла ~/work/project/.pdbrc:

# Пример переопределения алиаса:

alias dirs pp "OVERRIDDEN!"

Интеграция с Emacs

Во многих IDE есть поддержка pdb, не исключение и Emacs, достаточно запустить так:

M+x pdb

И вам предстанет консоль pdb в одной панели, а в другой реалтайм-листинг кода, почти PuDB, но всеравно удобнее.

Информация о файле
Название файла Отладчик тестовых программ на Python. от пользователя Гость
Дата добавления 10.5.2020, 19:54
Дата обновления 10.5.2020, 19:54
Тип файла Тип файла (zip - application/zip)
Скриншот Не доступно
Статистика
Размер файла 531.82 килобайт (Примерное время скачивания)
Просмотров 717
Скачиваний 74
Оценить файл