Many years ago when debugging real time systems (such as the ones used in telephone switches) we had to use logic analyzers (which read execution straight from the CPU) or emulators (which physically replaced the CPU itself).
Is there any situation where this type of instrumenting is still relevant?
2
I don’t see general-purpose logic analyzers in labs as often as I did ten or twenty years ago.
On the other hand, I see special-purpose logic analyzers far more often. They’re called USB analyzers and VMEbus analyzers, and your managers are INSANE if they put you on such a project without having such an analyzer (and, in the case of VMEbus projects, a chassis slot dedicated to a blank space, to hold the analyzer when (not if, but WHEN) you need it.
I also see far more powerful oscilloscopes a lot more often. A modern 4-channel digital storage scope is a thing of beauty, and it is absolutely critical if you are doing i2C or SPI or serial or any of a number of other things.
True in-circuit emulators have all but vanished. JTAG debuggers have become ubiquitous, and they can do ALMOST everything an in-circuit emulator could do.
What I still don’t see is adequate attention paid up-front to writing correct source code before ever going into the lab. Unfortunately, as long as C and C++ are dominant, and Ada is a dirty word, I expect the “code in haste and debug at leisure” mindset to prevail.
2
I still use a four-channel oscilloscope when debugging hardware, but that’s just my personal projects. I imagine that people working with microcontrollers in embedded environments still use emulators and logic analyzers, though — as long as the bus speeds don’t get too high, anyway.