If you are developing a debug server for qemu, after qemu hit a breakpoint, your server have to remove the breakpoint manually and re-insert it after the cpu passed that EIP, otherwise the cpu will forever stay in the EIP and can’t single-step/cont to the next instruction. If you take a look the gdbstub.c, gdb will fire a ‘Z’ command to gdbstub to remove the breakpoint after the breakpoint is hit.
That’s why my debug server not working before.