You laugh, but Python works the same way.
For POSIX you have `raise(SIGTRAP)` or gcc you have `__builtin_trap()` which actually has some caveats. [1]
[0] https://msdn.microsoft.com/en-us/library/windows/desktop/ms6...
[1] https://stackoverflow.com/questions/173618/is-there-a-portab...
As for python, I debug it by adding print() statements. No debugger involved. If there's a way to insert debugger breakpoints in the source, I'm unaware of it.