[all-commits] [llvm/llvm-project] f45754: [lldb] Batch breakpoint step-over for threads stop...
barsolo2000 via All-commits
all-commits at lists.llvm.org
Thu Feb 19 15:18:39 PST 2026
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: f45754b65e32789bbb0c0fae50a529fed244546d
https://github.com/llvm/llvm-project/commit/f45754b65e32789bbb0c0fae50a529fed244546d
Author: barsolo2000 <barsolo at meta.com>
Date: 2026-02-19 (Thu, 19 Feb 2026)
Changed paths:
M lldb/include/lldb/Target/ThreadList.h
M lldb/include/lldb/Target/ThreadPlanStepOverBreakpoint.h
M lldb/source/Target/ThreadList.cpp
M lldb/source/Target/ThreadPlanStepOverBreakpoint.cpp
A lldb/test/API/functionalities/gdb_remote_client/TestBatchedBreakpointStepOver.py
A lldb/test/API/functionalities/thread/concurrent_events/TestConcurrentBatchedBreakpointStepOver.py
Log Message:
-----------
[lldb] Batch breakpoint step-over for threads stopped at the same site (#180101)
Following up from
https://discourse.llvm.org/t/improving-performance-of-multiple-threads-stepping-over-the-same-breakpoint/89637
When multiple threads are stopped at the same breakpoint, LLDB currently
steps each thread over the breakpoint one at a time. Each step requires
disabling the breakpoint, single-stepping one thread, and re-enabling
it, resulting in N disable/enable cycles and N individual vCont packets
for N threads.
Now we batch the step-over so that all threads at the same breakpoint
site are stepped together in a single vCont packet, with the breakpoint
disabled once at the start and re-enabled once after the last thread
finishes.
When we hit `WillResume` any leftover `StepOverBreakpoint` plans from a
previous cycle are popped with their re-enable side effect suppressed
via `SetReenabledBreakpointSite`, giving a clean slate.
`SetupToStepOverBreakpointIfNeeded` then creates fresh plans for all
threads that still need to step over a breakpoint, and these are grouped
by breakpoint address.
For groups with multiple threads, each plan is set to defer its
re-enable through `SetDeferReenableBreakpointSite`. Instead of
re-enabling the breakpoint directly when a plan completes, it calls
`ThreadFinishedSteppingOverBreakpoint`, which decrements a tracking
count per address. The breakpoint is only re-enabled when the count
reaches zero.
All threads in the largest group are resumed together in a single
batched vCont packet. If some threads don't complete their step in one
cycle, the pop-and-recreate logic naturally re-batches the remaining
threads on the next WillResume call.
Claude AI assisted in syntex fixes and making the comments more
understandable.
---------
Co-authored-by: Bar Soloveychik <barsolo at fb.com>
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list