To debug, programmers must first be able to identify exactly where the bugs are, which is known as fault localization. Basically, this approach aims at prioritizing the program code based on its suspicious levels. Thus, it allows the code segments which are more likely to contain bug to be examined first. In this talk, we present the fundamental techniques of fault localization, which include model-based, proof-based and spectrum-based techniques. In addition, we also give a demonstration of a self-developed online education tool to help students locate the potential root causes of the programming errors occurring in their exercises.