Branch trace is a computer program debugging tool or analysis technique. It is an abbreviated instruction trace in which only the successful branch instructions are recorded. On IBM System/360 this was implemented as part of Program-Event Recording (PER) but was seldom used at the application programming level. Program Event Recording hardware was used and due to the overhead of this tool, it was removed from customer-available MVS systems.
Branch tracing is also available for Pentium 4, Intel Xeon and later Intel processors. There are dedicated processor commands to enable branch tracing and save executed branches into special Branch Trace Store area of resident memory. The Branch Trace Store can be also configured to be a circular buffer, so that last executed branches are recorded. Branch tracing on Intel processors can cause 40x application run-time slow down.
With the availability and reference to a compiler listing of the program together with a branch trace, the full path of executed instructions can be reconstructed. With a lot more effort, the full path can even be reconstructed with a memory dump (containing the program storage) and a branch trace.
A more comprehensive trace of all the instructions (including instructions between branches) can be obtained by the use of an instruction set simulator (where available on some platforms). A full instruction trace can provide additional information such as address/length and value of memory alterations.
- IA-32 Intel® Architecture Software Developer’s Manual (ftp://download.intel.com/support/processors/celeron/sb/6.pdf), Volume 3B: System Programming Guide, Part 2, Chapter 18.4 Last branch reording overview.
- Exploiting Hardware Advances for Software Testing and Debugging (NIER Track), by Mary Lou Soffa, Kristen R. Walcott, Jason Mars, in Proceedings of ICSE, 2011. See Chapter 4.2 Branch Trace Store.
- Introduce new branch tracer 'perf branch' by Akihiro Nagai.