An interesting and underused (underimplemented?) idea in debugging: time travel. I personally first heard it back when trying Redux, but just now discovered rr which applies a similar idea to any C/C++ program, which seems quite powerful indeed.
Stumbled upon this within a discussion of Firefox's new Web Replay feature that's coming soon and bringing the same thing to webapps.
I really wish all languages and environments had something of this calibre to offer. It would make programming so much easier as compared to the state-of-the-art we have now with most languages where it's not much better than just sprinkling print statements all over the place. Manipulating the flow of time seems so much more innovative and offers better insight about how the state had changed up until a certain point, not just seeing the state at that point in time.