Skip to content

Commit 6bac76b

Browse files
piyushjaiswal98Piyush Jaiswal
andauthored
[lldb] Refactor LLDB Breakpoint Event Notifications to centralize and eliminate code duplication (#164739)
### Summary This PR refactors breakpoint event notification in LLDB to centralize and eliminate code duplication. It creates a unified method in the `Target` class for sending breakpoint change events. The new methods check if listeners exist before broadcasting events ### Test <img width="1532" height="76" alt="Screenshot 2025-10-23 at 12 49 31 PM" src="https://github.com/user-attachments/assets/6d6a6da6-9684-463c-aeeb-90663cdbd077" /> --------- Co-authored-by: Piyush Jaiswal <[email protected]>
1 parent fe8ab75 commit 6bac76b

File tree

5 files changed

+32
-23
lines changed

5 files changed

+32
-23
lines changed

lldb/include/lldb/Target/Target.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,6 +1346,13 @@ class Target : public std::enable_shared_from_this<Target>,
13461346
const lldb_private::RegisterFlags &flags,
13471347
uint32_t byte_size);
13481348

1349+
/// Sends a breakpoint notification event.
1350+
void NotifyBreakpointChanged(Breakpoint &bp,
1351+
lldb::BreakpointEventType event_kind);
1352+
/// Sends a breakpoint notification event.
1353+
void NotifyBreakpointChanged(Breakpoint &bp,
1354+
const lldb::EventDataSP &breakpoint_data_sp);
1355+
13491356
llvm::Expected<lldb::DisassemblerSP>
13501357
ReadInstructions(const Address &start_addr, uint32_t count,
13511358
const char *flavor_string = nullptr);

lldb/source/Breakpoint/Breakpoint.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,25 +1098,18 @@ bool Breakpoint::EvaluatePrecondition(StoppointCallbackContext &context) {
10981098
}
10991099

11001100
void Breakpoint::SendBreakpointChangedEvent(
1101-
lldb::BreakpointEventType eventKind) {
1102-
if (!IsInternal() && GetTarget().EventTypeHasListeners(
1103-
Target::eBroadcastBitBreakpointChanged)) {
1104-
std::shared_ptr<BreakpointEventData> data =
1105-
std::make_shared<BreakpointEventData>(eventKind, shared_from_this());
1106-
1107-
GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data);
1108-
}
1101+
lldb::BreakpointEventType event_kind) {
1102+
if (!IsInternal())
1103+
GetTarget().NotifyBreakpointChanged(*this, event_kind);
11091104
}
11101105

11111106
void Breakpoint::SendBreakpointChangedEvent(
11121107
const lldb::EventDataSP &breakpoint_data_sp) {
11131108
if (!breakpoint_data_sp)
11141109
return;
11151110

1116-
if (!IsInternal() &&
1117-
GetTarget().EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged))
1118-
GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged,
1119-
breakpoint_data_sp);
1111+
if (!IsInternal())
1112+
GetTarget().NotifyBreakpointChanged(*this, breakpoint_data_sp);
11201113
}
11211114

11221115
const char *Breakpoint::BreakpointEventTypeAsCString(BreakpointEventType type) {

lldb/source/Breakpoint/BreakpointList.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,7 @@ using namespace lldb;
1616
using namespace lldb_private;
1717

1818
static void NotifyChange(const BreakpointSP &bp, BreakpointEventType event) {
19-
Target &target = bp->GetTarget();
20-
if (target.EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) {
21-
auto event_data_sp =
22-
std::make_shared<Breakpoint::BreakpointEventData>(event, bp);
23-
target.BroadcastEvent(Target::eBroadcastBitBreakpointChanged,
24-
event_data_sp);
25-
}
19+
bp->GetTarget().NotifyBreakpointChanged(*bp, event);
2620
}
2721

2822
BreakpointList::BreakpointList(bool is_internal)

lldb/source/Breakpoint/BreakpointLocation.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -749,13 +749,11 @@ void BreakpointLocation::Dump(Stream *s) const {
749749

750750
void BreakpointLocation::SendBreakpointLocationChangedEvent(
751751
lldb::BreakpointEventType eventKind) {
752-
if (!m_owner.IsInternal() && m_owner.GetTarget().EventTypeHasListeners(
753-
Target::eBroadcastBitBreakpointChanged)) {
752+
if (!m_owner.IsInternal()) {
754753
auto data_sp = std::make_shared<Breakpoint::BreakpointEventData>(
755754
eventKind, m_owner.shared_from_this());
756755
data_sp->GetBreakpointLocationCollection().Add(shared_from_this());
757-
m_owner.GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged,
758-
data_sp);
756+
m_owner.GetTarget().NotifyBreakpointChanged(m_owner, data_sp);
759757
}
760758
}
761759

lldb/source/Target/Target.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "lldb/Target/Target.h"
10+
#include "lldb/Breakpoint/Breakpoint.h"
1011
#include "lldb/Breakpoint/BreakpointIDList.h"
1112
#include "lldb/Breakpoint/BreakpointPrecondition.h"
1213
#include "lldb/Breakpoint/BreakpointResolver.h"
@@ -5271,3 +5272,19 @@ void Target::ClearSectionLoadList() { GetSectionLoadList().Clear(); }
52715272
void Target::DumpSectionLoadList(Stream &s) {
52725273
GetSectionLoadList().Dump(s, this);
52735274
}
5275+
5276+
void Target::NotifyBreakpointChanged(Breakpoint &bp,
5277+
lldb::BreakpointEventType eventKind) {
5278+
if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) {
5279+
std::shared_ptr<Breakpoint::BreakpointEventData> data_sp =
5280+
std::make_shared<Breakpoint::BreakpointEventData>(
5281+
eventKind, bp.shared_from_this());
5282+
BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data_sp);
5283+
}
5284+
}
5285+
5286+
void Target::NotifyBreakpointChanged(
5287+
Breakpoint &bp, const lldb::EventDataSP &breakpoint_data_sp) {
5288+
if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged))
5289+
BroadcastEvent(Target::eBroadcastBitBreakpointChanged, breakpoint_data_sp);
5290+
}

0 commit comments

Comments
 (0)