The identification and removal of localized implementation errors—or bugs—from a program or system. By contrast, testing seeks to establish whether bugs exist but does not isolate or remove them. Program debugging is often supported by a debug tool, a software tool that allows the internal behaviour of the program to be investigated. Such a tool would typically offer trace facilities (see trace program), allow the planting of breakpoints (i.e. points in the program at which execution is to be suspended so that examination of partial results is possible), and permit examination and perhaps modification of the values of program variables when a breakpoint is reached.