Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Метод отладки, используемый в разработке программного обеспечения
Debugging method used in software development
В разработке программного обеспечения точка останова — это намеренное место остановки или приостановки выполнения программы, устанавливаемое для целей отладки. Её также иногда называют просто паузой. В более широком смысле, точка останова — это способ получения информации о программе в процессе её выполнения. Во время приостановки программист анализирует тестовую среду (регистры общего назначения, память, журналы, файлы и т. д.), чтобы выяснить, работает ли программа как ожидается. На практике точка останова состоит из одного или нескольких условий, определяющих, когда следует прервать выполнение программы.
In software development, a breakpoint is an intentional stopping or pausing place in a program, put in place for debugging purposes. It is also sometimes simply referred to as a pause. More generally, a breakpoint is a means of acquiring knowledge about a program during its execution. During the interruption, the programmer inspects the test environment (general purpose registers, memory, logs, files, etc.) to find out whether the program is functioning as expected. In practice, a breakpoint consists of one or more conditions that determine when a program's execution should be interrupted.
История
Пункты останова были изобретены для ENIAC, одного из самых ранних цифровых компьютеров, программистом Бетти Холбертон. В первоначальной конструкции ENIAC, ход программы задавался подключением кабелей от одного устройства к другому. Чтобы программа остановилась в определенной точке, кабель извлекался – это и называлось точкой останова.
Breakpoints were invented for ENIAC, one of the earliest digital computers, by programmer Betty Holberton. In the initial design of ENIAC, program flow was set by plugging cables from one unit to another. To make the program stop at a certain point, a cable was removed, called a breakpoint.
Пункты остановки машины
Ранние мейнфрейм-компьютеры, такие как IBM/360, оснащались консольными переключателями и регуляторами, позволявшими устанавливать точки останова по конкретным адресам хранения инструкций и обеспечивали работу в режиме "одного цикла", давая возможность наблюдать содержимое регистров и памяти непосредственно на индикаторах консоли. С появлением многозадачности использование этой функции стало ограниченным, так как при этом останавливалась вся машина.
Early mainframe computers, such as the IBM/360, had console switches/dials that allowed breakpoints at specific instruction storage addresses and provided "single cycle" operation, permitting the contents of registers and memory to be observed directly on console lights. The advent of multitasking limited the use of this option since the entire machine was halted.
Неинтерактивные точки прерывания
Программисты использовали патчи машинного кода для реализации одиночных деструктивных точек останова, чтобы вызвать дамп памяти с самых ранних дней существования компьютеров. Дамп памяти предоставлял состояние регистров и памяти в точный момент преднамеренного "аварийного завершения".
Programmers have used machine code patches to implement single destructive breakpoints to cause a core dump since the early days of computers. The core dump provided the state of the registers and memory at the exact moment of the deliberate "crash".
Интерактивные точки прерывания
Появление консолей телетайпов в 1960-х годах обеспечило более интерактивные возможности отладки в командной строке, но полноценная интерактивная отладка на весь экран в многозадачных средах стала реальностью лишь в начале 1970-х годов с распространением видеомониторов, подключенных к мэйнфреймам. Это также позволило выполнять программу пошагово, фактически анимируя ее, с одновременным отображением изменений регистров и памяти. Первоначально такая анимация осуществлялась на уровне дизассемблированного или декомпилированного машинного кода, но впоследствии перешла к анимации на уровне исходного кода языков высокого уровня.
The advent of teletypewriter consoles in the 1960s allowed more interactive command line debugging capabilities but it was not until the early 1970s and the arrival of ubiquitous video monitors connected to mainframes that fully interactive, full screen debugging in multitasking environments became a reality. This also permitted step by step program execution in a true program animation manner with optional register and memory alterations simultaneously displayed. Initially this type of animation was at the level of disassembled or decompiled machine code, but later advanced to HLL source level animation.
Условные точки прерывания
Точки прерывания чаще всего используются для прерывания выполняющейся программы непосредственно перед выполнением инструкции, указанной программистом. Это часто называют точкой прерывания по инструкции. Также могут использоваться другие виды условий, например, чтение, запись или изменение конкретной ячейки памяти. Это часто называют точкой прерывания по данным или точкой наблюдения. Многие системы также поддерживают точки прерывания, которые активируются только при выполнении определенного условия (например, когда переменная принимает определенное значение), обычно называемые условными точками прерывания.
Breakpoints are most commonly used to interrupt a running program immediately before the execution of a programmer specified instruction. This is often referred to as an instruction breakpoint. Other kinds of conditions can also be used, such as the reading, writing, or modification of a specific location in an area of memory. This is often referred to as a data breakpoint, or a watchpoint. Many systems also support breakpoints that are only active if a condition is met (such as a variable having a certain value), usually referred to as conditional breakpoint.
Инструменты проверки
Когда достигается точка останова, для изучения состояния программы или его изменения используются различные инструменты. Трассировка стека для каждой нити позволяет увидеть цепочку вызовов функций, приведших к остановке выполнения инструкции. Список отслеживаемых выражений позволяет просматривать значения выбранных переменных и выражений. Также могут быть доступны инструменты для отображения содержимого регистров, загруженных программных модулей и другой информации.
When a breakpoint is hit, various tools are used to inspect the state of the program or alter it. Stack trace of each thread may be used to see the chain of function calls that led to the paused instruction. A list of watches allows one to view the values of selected variables and expressions. There may also be tools to show the contents of registers, loaded program modules and other information.
Запись
Логпойнт — это тип точки останова, который выводит (или "регистрирует") информацию, не прерывая выполнение. Обычно разработчик может указать сообщение и/или значения переменных для вывода при достижении выполнения определенной точки. Логпойнты являются альтернативой добавлению операторов логирования в отлаживаемую программу (иногда называемую отладкой через printf) и особенно полезны, когда изменение программы нецелесообразно (например, при отладке внешней библиотеки, вызываемой программой).
A logpoint is a type of breakpoint that only prints (or "logs") information instead of interrupting execution. Usually the developer can specify a message and/or values of variables to print when execution reaches a specific point. Logpoints are an alternative to putting logging statements into the program being debugged (sometimes called printf debugging), and particularly helpful when changing the program is not practical (for example when debugging an external library called by the program).
Оборудование
Многие процессоры включают аппаратную поддержку точек останова (обычно точек останова инструкций и данных). Например, архитектура набора инструкций x86 предоставляет аппаратную поддержку точек останова посредством регистров отладки x86. Подобное аппаратное обеспечение может иметь ограничения, например, запрет установки точек останова на инструкции, находящиеся в слотах задержки ветвлений. Это ограничение обусловлено микроархитектурой процессора и различается в зависимости от конкретного процессора.
Many processors include hardware support for breakpoints (typically instruction and data breakpoints). As an example, the x86 instruction set architecture provides hardware support for breakpoints with its x86 debug registers. Such hardware may include limitations, for example not allowing breakpoints on instructions located in branch delay slots. This kind of limitation is imposed by the microarchitecture of the processor and varies from processor to processor.