A logic analyzer displays signals in a digital circuit that are too fast to be observed by a human being and presents it to a user so that the user can more easily check correct operation of the digital system. Logic analyzers are typically used for capturing data in systems that have too many channels to be examined with an oscilloscope. Software running on the logic analyzer can convert the captured data into timing diagrams, protocol decodes, state machine traces, assembly, or correlate assembly with source-level software. A logic analyzer can trigger on a complicated sequence of digital events, and then capture a large amount of digital data from the system under test. The best logic analyzers behave like software debuggers by showing the flow of the computer program and decoding protocols to show messages and violations. Once the data is captured, it can be displayed several ways, from the simple for example showing waveforms or state listings to the complex for example showing decoded Ethernet protocol traffic. The analyzer can also operate in a compare mode, where it compares each captured data set to a previously recorded data set, and stopping triggering when this data set is either matched or not. This is useful for long-term empirical testing. Recent analyzers can even be set to email a copy of the test data to the engineer on a successful trigger.