Sometimes a debugger is simply the fastest route to isolating and solving an issue.
I recently had to track down a kernel issue caused by an piece of code unrelated to my current work casting a signed value to unsigned and eventually triggering a kernel panic. Thanks to remote kernel debugging, I could simply step through the code path and track the changes. If I accidentally overstepped the failure point, I just reset the virtual machine back to the snapshot point and reattached the debugger.
Did this mean that I didn't know how the code behaved? No -- I had to understand the code, but there was very little chance that I would quickly eyeball a single incorrect cast in a comparison 6 degrees of separation from where my own code was being run without being able to trace the issue a couple times in a debugger as it happened.
I recently had to track down a kernel issue caused by an piece of code unrelated to my current work casting a signed value to unsigned and eventually triggering a kernel panic. Thanks to remote kernel debugging, I could simply step through the code path and track the changes. If I accidentally overstepped the failure point, I just reset the virtual machine back to the snapshot point and reattached the debugger.
Did this mean that I didn't know how the code behaved? No -- I had to understand the code, but there was very little chance that I would quickly eyeball a single incorrect cast in a comparison 6 degrees of separation from where my own code was being run without being able to trace the issue a couple times in a debugger as it happened.