Cache memories are now standard components of modern computer systems. They have proven extremely useful in bridging the gap between CPU and DRAM speeds, which continues to grow. Consequently, there has been a great deal of research into making caches more aggressive. A specific type of cache is the ``trace cache'' which stores dynamic sequences of instructions as opposed to sequential contiguous blocks. It is the aim of this paper to provide an overview of trace caches against a background of enhancements to standard caches. The basic trace cache architecture is presented together with a survey of several enhancements which have been made to improve its performance. Following this the limitations of trace caches are discussed.