On Mon, 22 Feb 2016, Mouse wrote: > These and many of the other stop conditions could possibly be subsumed > by a "stop when this expression evaluates true" facility, with > expression primitives capable of representing all the things you might > want to watch. It would of course be CPU-intensive if the expression > is complicated, but that's unavoidable, and I have occasionally wished > for "run until this number is greater than that number plus twice this > register" or the like, even if it runs multiple orders of magnitude > slower. (Not when running under RT-11, but that's mostly because I > have done little-to-no work under RT-11 at all.)
This is exactly how GDB's watchpoint facility works BTW. Except from the very simple case of watching a memory location, which in some processors can be delegated to a hardware watchpoint facility, GDB implements this by single-stepping the debuggee repeatedly, which of course hits performance enormously. Then, whether through single-stepping or as a result of a hardware watchpoint hit, it stops the debuggee and returns control to the user whenever the watchpoint condition evaluates to true. Any expression valid in the high-level language chosen for debugging (which is usually the same as one the debuggee has been compiled from) can be used as a condition, also for breakpoints, and you can refer to hardware registers, which are presented as special variables (side effects work too!). As a matter of interest some embedded MIPS processors have more complex hardware watchpoint support in which certain conditions can actually be presented to hardware as a chain of prerequisites for a watchpoint hit. This facility is available for JTAG debugging only and support has never been implemented in GDB, although JTAG debugging itself is supported in GDB with the use of a suitable remote debug stub (or more precisely GDB does not care what it talks to as long as it speaks GDB's language, aka Remote Serial Protocol). FWIW, Maciej