The $D directive enables or disables the generation of debug information. This information consists of a line-number table for each procedure, which maps object-code addresses into source text line numbers.For units, the debug information is recorded in the unit file along with the unit's object code. Debug information increases the size of unit file and takes up additional memory when compiling programs that use the unit, but it does not affect the size or speed of the executable program.When a program or unit is compiled in the {$D+} state, Delphi's integrated debugger lets you single-step and set breakpoints in that module.
The Include debug info (Project|Options|Linker) and Map file (Project|Options|Linker) options produce complete line information for a given module only if you've compiled that module in the {$D+} state.
The $D switch is usually used in conjunction with the $L switch, which enables and disables the generation of local symbol information for debugging. See also "The generate Turbo Debugger debug info (/V) option" and "Symbol cross-reference information."