So I have long since known about Abort, Retry, Ignore, but I have never known why it is so wide spread in assorted Windows programs. I figured this out today while looking in some .Net code(which I'm assuming carries over from Win32)
The Debug.Assert method will cause this error, as does Trace.Assert. As you can see from the documentation there, Abort Retry Ignore comes from these methods. Abort ends the program, Retry will open a debugger if available, and Ignore will ignore the assertion.
So next time you see an Abort Retry Ignore message, just remember that the programmer probably didn't intend for you to see that, and right next to that line of code was
//this won't ever happen... but just in case