We came up with a variety of ways to understand complex computations spread between multiple cpus and attached hardware.
Source Level Traps inserted in the compiler's intermediate representation and handled by a library.
State Ports were decoded from the I/O space and presented in LED lights and square pins.
Circular Buffer in RAM that gave you something to look at after a crash.
All before people accepted the notion of design for testability.