In short, omniscient debugging records all that happen after the program start. Hence, after crash or some errors, you can go to the past. Because everything (thread, instances, variable, etc) is recorded, everything can be set properly. You see the bug, and go back, then you can find the bug qutie easily.
Compare ODB to the classic debugging. Breakpoints are set based on some intuition. And press continue, finds that everything is okay, so continue, and the crashes. So, new breakpoints have to be set. Press the continue, and so on.