rocallahan wrote:

Ok, tell me what you think of this proposal:

1) Each thread plan has a virtual `GetDirection()` method returning 
`RunDirection`. Existing plans other than `ThreadBasePlan` return `eRunForward`.
2) There is a per-process `base direction` flag. 
`ThreadBasePlan::GetDirection()` returns the value of that flag. Defaults to 
`eRunForward`.
3) There is a new `SBProcess::ContinueInDirection(direction)` method. This 
method updates the "process base direction" flag. For simplicity, for now, _if 
the base direction changed_, pop all plans on all threads.
4) `SBProcess::Continue()` is unchanged, i.e. preserves the base direction.
5) When we resume execution:
5a) If we choose to resume a single runnable thread whose current plan has 
`StopOthers()` , just resume using that plan's direction.
5b) Otherwise use the process base direction, and before resuming, pop plans 
until all threads' current plans match that direction.

I think this is fairly simple while behaving much like what you suggest. It 
doesn't require introducing a new kind of `ThreadPlan` which is good. I think 
it can extend cleanly to support reverse-step etc.

https://github.com/llvm/llvm-project/pull/112079
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to