In this thesis computer programming and programming systems are studied, with a view to reducing the time required to debug programs written in high level programming languages. A general approach to the detection, location and correction of bugs is developed; and the provision of debugging facilities for high level languages is discussed with respect to three major issues : - What information does the programmer need to help him debug his programs ? - How should this information be presented to him ? - How can this information be made available ? Firstly, the programming process is analysed, and the various types of program errors are identified. Ways in which these errors can be avoided, and treatment of those errors which can be detected...