When debugging code that are close to the metal such as device drivers or interrupt service routines, the code's behavior is very tightly coupled to the metal.
For example, the interrupt service routine that your debugging could not reacting fast enough and you need to find out why? Priority of the said interrupt is correctly configured and it is blocked by a higher priotiy interrupt. This type of behaviour difficult to track down if a debugger is not used.