It has been pointed out repeatedly that it should be possible to adapt global program optimization algorithms for the purpose of detecting faults in programs. It has become clear that global program analysis can be beneficial in program development, debugging, verification, and documentation since it can provide information about all possible executions of the code at once. The techniques employed are not only capable of revealing errors, interfacing errors, and other shortcomings but of doing so in a way which helps to pinpoint the source of problems. In this dissertation we systematically examine the global optimization techniques available today to determine how these techniques can be used to aid the rapid, compile-time detection of program errors. The techniques considered include flow tracing, type finding, and value flow. The approach is to determine what facts about a program can be collected using the best available program analysis technique, and to use this information to mark suspicious program segments. The techniques proposed have been implemented in an extensive global bug finder, and examples of its use are included.