> On Feb 27, 2024, at 1:53 PM, Kyle Huey via Dwarf-discuss 
> <dwarf-discuss@lists.dwarfstd.org> wrote:
> 
> Put another way (forgive my pseudo code), if you have
> 
> function silly_print() {
>     delay = rand();
>     // Point 1
>     async_sleep(delay).await;
>     // Point 2
>     printf("Hello" );
> }
> 
> function do_stuff() {
>     runtime.async_dispatch(silly_print());
>     runtime.async_dispatch(silly_print());
> }
> 
> When stepping from point 1 to point 2, the breakpoint on the post-await 
> funclet at point 2 has to be conditional on being on the async_context being 
> the same async_context the debugger was using at point 1, right? And then you 
> have to be able to determine what the "same async_context" is.


LLDB implements this in a custom stepping plan that creates a conditional 
breakpoint where two async contexts are compared: First, there's the active 
async context at the time of the step. Next, the active async context at the 
time the breakpoint is hit. If the two async contexts are equal, then the 
breakpoint is discarded and the step has completed.

-- adrian
-- 
Dwarf-discuss mailing list
Dwarf-discuss@lists.dwarfstd.org
https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss

Reply via email to