@LeP thanks for that info. I do have an old, but working monitor right next to the main one (currently attached to a Lenovo that probably would be out-performed by a BBC micro). So wlll try to explore that, would be a good excuse anyway, only time I ever do 2 monitors is if I have to use a laptop (I attach keyboard, mouse and monitor, and voila, no longer mobile).
IMHO multiple Monitors help a lot with working on code, debugging, and more...
Especially, if you use a docked IDE and that will occupy one screen by itself, and you can't spare a corner for the running app, that you want to debug.
The crux is (IMHO) that a docked IDE is something you start to need, if you have a single screen, because then you have so many IDE Windows that they don't fit the space you have. And then, if you have only one single screen, the docked IDE makes it a lot harder to have some spare space for the app to run...
I only use docking on my laptop, and I don't do much serious work on it, otherwise I have several screens and space enough for all the IDE windows **and** any app I am running.
So, if you have a spare monitor, even if it is old and the quality may not be good, use it. If you debug your app on it, it shouldn't matter that is may not have the best contrast or lower resolution, or slow pixel switching times ...
For example, if you are running your form, and you have the code open on another, can see the data live if you hover the mouse on it, or if the code hits a breakpoint, can you do anything with the form, like resize it. Even as write that, I feel I'm answering my own question. I think that is a level of interaction that is the holy grail, but I would love to be proven wrong. If AI can make a believable talking yeti, then anything is possible.
There is no "live data". Data only gets loaded when the app is paused (at a breakpoint / single stepping / ...). And when the app is paused you can't interact with it (you can't click buttons, or change the size).
Partly that is actually dictated by the "data" itself.
NOTE: the below is "in theory". What could be added to the debugger, and what could not. But the below is not currently implemented.
Lets start with local vars, they only exist while inside a routine. But to interact with the app, the app must run => so the app will be in different routines all the time. It be 10 millisecond in one routine. There wouldn't be a point to show the data for 10 millisecs.
Global vars of course exists all the time. It would be possible (as a feature that has not yet been added) to watch a global var, by pulling the value every 50 millisecs.
Fields (in object, e.g. fields of a form or frame) are a middle ground. The are like locals, if the object is a local. If the object is global, and you specify the full name from that global var => and if that feature was implemented (which it is not), then that could be done.
Of course that would likely by of limited use. The value could change several time in such short intervals, that you would not even be able to see that it changed several times (or changed at all, if it changed back immediately).
And if the value gets updated "on a timer" (e.g. the debugger checks ever 50millisecs) then the debugger may even miss that it changed.
Of course the debugger could use the "value changed" notification (which is used for "data breakpoints"). But only 4 values (and only up to pointer size) can be monitored like this....
So, "live watching" would have a lot of limitations.
Anyway as it stand now, you can only see values while paused.
The usual approach is to single step, and monitor the watch you are interested in, as single stepping will pause at each statement, and therefore give you updates. But if you don't know where approx you need to debug, single stepping may not be a solution (no one would single step 1000 steps...)
Then you can use watchpoints. If you know which value should change => set a watchpoint. (you can combine that with the history / if you don't want to pause the app completely when it happens)