A breakpoint, in software development, is an intentional stopping or pausing place in a program, put in place for debugging purposes. 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 (logs, memory, files, etc.) to find out whether the program functions as expected.
In practice, a breakpoint consists of one or more conditions that determine when a program's execution should be interrupted.
The most common form of a breakpoint is one where the program's execution is interrupted before a programmer-specified instruction is executed. 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.
Breakpoints can also be used to interrupt execution at a particular time, or upon a keystroke etc.
Many processors include hardware support for breakpoints (typically instruction and data breakpoints). 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, so varies from processor to processor.
Without hardware support, debuggers have to implement breakpoints in software. For instruction breakpoints, this is a comparatively simple task of replacing the instruction at the location of the breakpoint. But implementing data breakpoints in software can greatly reduce the performance of the application being debugged.
Some programming language implementations expose their debugging functions for use by other programs.
For example, some FORTRAN dialects have an
AT statement, which was originally intended to act as an instruction breakpoint.
Python implements a debugger accessible from a Python program.
These facilities can be and are abused to act like the COMEFROM statement.