About 15 years ago I helped someone debug a small program that remained silent while it should produce output. So we added a few debugging print statements. The program ran correctly (printing beside the debugging messages, also the messages it should). Removed the debugging, no messages at all. So we did a binary search to find out what the minimum amount of debugging messages printed was necessary.
A bare minimum. Printing an additional empty string made the program work correctly. No additional printing, and the program would not print at all.
Fast forward to a few months ago. I was trying to get an open source program working on an embedded system. It kept crashing with segmentation faults. Added debugging print statements - and it ran fine. Remove them, crash. Put them elsewhere, crash. Moved to a different place, and it ran fine. Eventually, I ended up with putting the following code in the program:
if(i == 0) abort();
This is after a for loop that left i to be equal to 256.